diff options
Diffstat (limited to 'crates/ra_mbe/src/tests.rs')
-rw-r--r-- | crates/ra_mbe/src/tests.rs | 99 |
1 files changed, 89 insertions, 10 deletions
diff --git a/crates/ra_mbe/src/tests.rs b/crates/ra_mbe/src/tests.rs index 254318e23..5d1274d21 100644 --- a/crates/ra_mbe/src/tests.rs +++ b/crates/ra_mbe/src/tests.rs | |||
@@ -142,6 +142,79 @@ macro_rules! impl_froms { | |||
142 | } | 142 | } |
143 | 143 | ||
144 | #[test] | 144 | #[test] |
145 | fn test_convert_tt2() { | ||
146 | parse_macro( | ||
147 | r#" | ||
148 | macro_rules! impl_froms { | ||
149 | ($e:ident: $($v:ident),*) => { | ||
150 | $( | ||
151 | impl From<$v> for $e { | ||
152 | fn from(it: $v) -> $e { | ||
153 | $e::$v(it) | ||
154 | } | ||
155 | } | ||
156 | )* | ||
157 | } | ||
158 | } | ||
159 | "#, | ||
160 | ) | ||
161 | .assert_expand( | ||
162 | "impl_froms!(TokenTree: Leaf, Subtree);", | ||
163 | r#" | ||
164 | SUBTREE $ | ||
165 | IDENT impl 20 | ||
166 | IDENT From 21 | ||
167 | PUNCH < [joint] 22 | ||
168 | IDENT Leaf 53 | ||
169 | PUNCH > [alone] 25 | ||
170 | IDENT for 26 | ||
171 | IDENT TokenTree 51 | ||
172 | SUBTREE {} 29 | ||
173 | IDENT fn 30 | ||
174 | IDENT from 31 | ||
175 | SUBTREE () 32 | ||
176 | IDENT it 33 | ||
177 | PUNCH : [alone] 34 | ||
178 | IDENT Leaf 53 | ||
179 | PUNCH - [joint] 37 | ||
180 | PUNCH > [alone] 38 | ||
181 | IDENT TokenTree 51 | ||
182 | SUBTREE {} 41 | ||
183 | IDENT TokenTree 51 | ||
184 | PUNCH : [joint] 44 | ||
185 | PUNCH : [joint] 45 | ||
186 | IDENT Leaf 53 | ||
187 | SUBTREE () 48 | ||
188 | IDENT it 49 | ||
189 | IDENT impl 20 | ||
190 | IDENT From 21 | ||
191 | PUNCH < [joint] 22 | ||
192 | IDENT Subtree 55 | ||
193 | PUNCH > [alone] 25 | ||
194 | IDENT for 26 | ||
195 | IDENT TokenTree 51 | ||
196 | SUBTREE {} 29 | ||
197 | IDENT fn 30 | ||
198 | IDENT from 31 | ||
199 | SUBTREE () 32 | ||
200 | IDENT it 33 | ||
201 | PUNCH : [alone] 34 | ||
202 | IDENT Subtree 55 | ||
203 | PUNCH - [joint] 37 | ||
204 | PUNCH > [alone] 38 | ||
205 | IDENT TokenTree 51 | ||
206 | SUBTREE {} 41 | ||
207 | IDENT TokenTree 51 | ||
208 | PUNCH : [joint] 44 | ||
209 | PUNCH : [joint] 45 | ||
210 | IDENT Subtree 55 | ||
211 | SUBTREE () 48 | ||
212 | IDENT it 49 | ||
213 | "#, | ||
214 | ); | ||
215 | } | ||
216 | |||
217 | #[test] | ||
145 | fn test_expr_order() { | 218 | fn test_expr_order() { |
146 | let expanded = parse_macro( | 219 | let expanded = parse_macro( |
147 | r#" | 220 | r#" |
@@ -179,7 +252,7 @@ fn test_expr_order() { | |||
179 | STAR@[11; 12) "*" | 252 | STAR@[11; 12) "*" |
180 | LITERAL@[12; 13) | 253 | LITERAL@[12; 13) |
181 | INT_NUMBER@[12; 13) "2" | 254 | INT_NUMBER@[12; 13) "2" |
182 | SEMI@[13; 14) ";" | 255 | SEMICOLON@[13; 14) ";" |
183 | R_CURLY@[14; 15) "}""#, | 256 | R_CURLY@[14; 15) "}""#, |
184 | ); | 257 | ); |
185 | } | 258 | } |
@@ -532,7 +605,7 @@ fn test_tt_to_stmts() { | |||
532 | EQ@[4; 5) "=" | 605 | EQ@[4; 5) "=" |
533 | LITERAL@[5; 6) | 606 | LITERAL@[5; 6) |
534 | INT_NUMBER@[5; 6) "0" | 607 | INT_NUMBER@[5; 6) "0" |
535 | SEMI@[6; 7) ";" | 608 | SEMICOLON@[6; 7) ";" |
536 | EXPR_STMT@[7; 14) | 609 | EXPR_STMT@[7; 14) |
537 | BIN_EXPR@[7; 13) | 610 | BIN_EXPR@[7; 13) |
538 | PATH_EXPR@[7; 8) | 611 | PATH_EXPR@[7; 8) |
@@ -547,7 +620,7 @@ fn test_tt_to_stmts() { | |||
547 | PLUS@[11; 12) "+" | 620 | PLUS@[11; 12) "+" |
548 | LITERAL@[12; 13) | 621 | LITERAL@[12; 13) |
549 | INT_NUMBER@[12; 13) "1" | 622 | INT_NUMBER@[12; 13) "1" |
550 | SEMI@[13; 14) ";" | 623 | SEMICOLON@[13; 14) ";" |
551 | EXPR_STMT@[14; 15) | 624 | EXPR_STMT@[14; 15) |
552 | PATH_EXPR@[14; 15) | 625 | PATH_EXPR@[14; 15) |
553 | PATH@[14; 15) | 626 | PATH@[14; 15) |
@@ -880,7 +953,7 @@ fn test_tt_composite2() { | |||
880 | PATH_SEGMENT@[0; 3) | 953 | PATH_SEGMENT@[0; 3) |
881 | NAME_REF@[0; 3) | 954 | NAME_REF@[0; 3) |
882 | IDENT@[0; 3) "abs" | 955 | IDENT@[0; 3) "abs" |
883 | EXCL@[3; 4) "!" | 956 | BANG@[3; 4) "!" |
884 | TOKEN_TREE@[4; 10) | 957 | TOKEN_TREE@[4; 10) |
885 | L_PAREN@[4; 5) "(" | 958 | L_PAREN@[4; 5) "(" |
886 | EQ@[5; 6) "=" | 959 | EQ@[5; 6) "=" |
@@ -1000,14 +1073,14 @@ fn test_vec() { | |||
1000 | PATH_SEGMENT@[9; 12) | 1073 | PATH_SEGMENT@[9; 12) |
1001 | NAME_REF@[9; 12) | 1074 | NAME_REF@[9; 12) |
1002 | IDENT@[9; 12) "Vec" | 1075 | IDENT@[9; 12) "Vec" |
1003 | COLONCOLON@[12; 14) "::" | 1076 | COLON2@[12; 14) "::" |
1004 | PATH_SEGMENT@[14; 17) | 1077 | PATH_SEGMENT@[14; 17) |
1005 | NAME_REF@[14; 17) | 1078 | NAME_REF@[14; 17) |
1006 | IDENT@[14; 17) "new" | 1079 | IDENT@[14; 17) "new" |
1007 | ARG_LIST@[17; 19) | 1080 | ARG_LIST@[17; 19) |
1008 | L_PAREN@[17; 18) "(" | 1081 | L_PAREN@[17; 18) "(" |
1009 | R_PAREN@[18; 19) ")" | 1082 | R_PAREN@[18; 19) ")" |
1010 | SEMI@[19; 20) ";" | 1083 | SEMICOLON@[19; 20) ";" |
1011 | EXPR_STMT@[20; 33) | 1084 | EXPR_STMT@[20; 33) |
1012 | METHOD_CALL_EXPR@[20; 32) | 1085 | METHOD_CALL_EXPR@[20; 32) |
1013 | PATH_EXPR@[20; 21) | 1086 | PATH_EXPR@[20; 21) |
@@ -1023,7 +1096,7 @@ fn test_vec() { | |||
1023 | LITERAL@[27; 31) | 1096 | LITERAL@[27; 31) |
1024 | INT_NUMBER@[27; 31) "1u32" | 1097 | INT_NUMBER@[27; 31) "1u32" |
1025 | R_PAREN@[31; 32) ")" | 1098 | R_PAREN@[31; 32) ")" |
1026 | SEMI@[32; 33) ";" | 1099 | SEMICOLON@[32; 33) ";" |
1027 | EXPR_STMT@[33; 43) | 1100 | EXPR_STMT@[33; 43) |
1028 | METHOD_CALL_EXPR@[33; 42) | 1101 | METHOD_CALL_EXPR@[33; 42) |
1029 | PATH_EXPR@[33; 34) | 1102 | PATH_EXPR@[33; 34) |
@@ -1039,7 +1112,7 @@ fn test_vec() { | |||
1039 | LITERAL@[40; 41) | 1112 | LITERAL@[40; 41) |
1040 | INT_NUMBER@[40; 41) "2" | 1113 | INT_NUMBER@[40; 41) "2" |
1041 | R_PAREN@[41; 42) ")" | 1114 | R_PAREN@[41; 42) ")" |
1042 | SEMI@[42; 43) ";" | 1115 | SEMICOLON@[42; 43) ";" |
1043 | PATH_EXPR@[43; 44) | 1116 | PATH_EXPR@[43; 44) |
1044 | PATH@[43; 44) | 1117 | PATH@[43; 44) |
1045 | PATH_SEGMENT@[43; 44) | 1118 | PATH_SEGMENT@[43; 44) |
@@ -1479,6 +1552,12 @@ impl MacroFixture { | |||
1479 | assert_eq!(expansion.to_string(), expected); | 1552 | assert_eq!(expansion.to_string(), expected); |
1480 | } | 1553 | } |
1481 | 1554 | ||
1555 | fn assert_expand(&self, invocation: &str, expected: &str) { | ||
1556 | let expansion = self.expand_tt(invocation); | ||
1557 | let actual = format!("{:?}", expansion); | ||
1558 | test_utils::assert_eq_text!(&actual.trim(), &expected.trim()); | ||
1559 | } | ||
1560 | |||
1482 | fn assert_expand_items(&self, invocation: &str, expected: &str) -> &MacroFixture { | 1561 | fn assert_expand_items(&self, invocation: &str, expected: &str) -> &MacroFixture { |
1483 | self.assert_expansion(FragmentKind::Items, invocation, expected); | 1562 | self.assert_expansion(FragmentKind::Items, invocation, expected); |
1484 | self | 1563 | self |
@@ -1681,7 +1760,7 @@ fn test_no_space_after_semi_colon() { | |||
1681 | MOD_KW@[21; 24) "mod" | 1760 | MOD_KW@[21; 24) "mod" |
1682 | NAME@[24; 25) | 1761 | NAME@[24; 25) |
1683 | IDENT@[24; 25) "m" | 1762 | IDENT@[24; 25) "m" |
1684 | SEMI@[25; 26) ";" | 1763 | SEMICOLON@[25; 26) ";" |
1685 | MODULE@[26; 52) | 1764 | MODULE@[26; 52) |
1686 | ATTR@[26; 47) | 1765 | ATTR@[26; 47) |
1687 | POUND@[26; 27) "#" | 1766 | POUND@[26; 27) "#" |
@@ -1700,7 +1779,7 @@ fn test_no_space_after_semi_colon() { | |||
1700 | MOD_KW@[47; 50) "mod" | 1779 | MOD_KW@[47; 50) "mod" |
1701 | NAME@[50; 51) | 1780 | NAME@[50; 51) |
1702 | IDENT@[50; 51) "f" | 1781 | IDENT@[50; 51) "f" |
1703 | SEMI@[51; 52) ";""###, | 1782 | SEMICOLON@[51; 52) ";""###, |
1704 | ); | 1783 | ); |
1705 | } | 1784 | } |
1706 | 1785 | ||