Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 1 | extern crate proc_macro2; |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 2 | extern crate syn; |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 3 | |
David Tolnay | c3f9856 | 2018-11-02 08:55:05 -0700 | [diff] [blame] | 4 | mod features; |
David Tolnay | c7a5d3d | 2017-06-04 12:11:05 -0700 | [diff] [blame] | 5 | |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 6 | #[macro_use] |
| 7 | mod macros; |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 8 | |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 9 | use proc_macro2::{Delimiter, Group, Literal, Punct, Spacing, TokenStream, TokenTree}; |
| 10 | use syn::Expr; |
| 11 | |
| 12 | use std::iter::FromIterator; |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 13 | |
| 14 | #[test] |
| 15 | fn test_grouping() { |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 16 | let tokens: TokenStream = TokenStream::from_iter(vec![ |
Alex Crichton | 9a4dca2 | 2018-03-28 06:32:19 -0700 | [diff] [blame] | 17 | TokenTree::Literal(Literal::i32_suffixed(1)), |
Alex Crichton | 9dc5d0e | 2018-05-17 11:09:21 -0700 | [diff] [blame] | 18 | TokenTree::Punct(Punct::new('+', Spacing::Alone)), |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 19 | TokenTree::Group(Group::new( |
David Tolnay | 5138205 | 2017-12-27 13:46:21 -0500 | [diff] [blame] | 20 | Delimiter::None, |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 21 | TokenStream::from_iter(vec![ |
Alex Crichton | 9a4dca2 | 2018-03-28 06:32:19 -0700 | [diff] [blame] | 22 | TokenTree::Literal(Literal::i32_suffixed(2)), |
Alex Crichton | 9dc5d0e | 2018-05-17 11:09:21 -0700 | [diff] [blame] | 23 | TokenTree::Punct(Punct::new('+', Spacing::Alone)), |
Alex Crichton | 9a4dca2 | 2018-03-28 06:32:19 -0700 | [diff] [blame] | 24 | TokenTree::Literal(Literal::i32_suffixed(3)), |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 25 | ]), |
David Tolnay | 5138205 | 2017-12-27 13:46:21 -0500 | [diff] [blame] | 26 | )), |
Alex Crichton | 9dc5d0e | 2018-05-17 11:09:21 -0700 | [diff] [blame] | 27 | TokenTree::Punct(Punct::new('*', Spacing::Alone)), |
Alex Crichton | 9a4dca2 | 2018-03-28 06:32:19 -0700 | [diff] [blame] | 28 | TokenTree::Literal(Literal::i32_suffixed(4)), |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 29 | ]); |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 30 | |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 31 | assert_eq!(tokens.to_string(), "1i32 + 2i32 + 3i32 * 4i32"); |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 32 | |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 33 | snapshot!(tokens as Expr); |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 34 | } |