1 extern crate proc_macro2;
2 extern crate syn;
3 
4 mod features;
5 
6 #[macro_use]
7 mod macros;
8 
9 use proc_macro2::{Delimiter, Group, Literal, Punct, Spacing, TokenStream, TokenTree};
10 use syn::Expr;
11 
12 use std::iter::FromIterator;
13 
14 #[test]
test_grouping()15 fn test_grouping() {
16     let tokens: TokenStream = TokenStream::from_iter(vec![
17         TokenTree::Literal(Literal::i32_suffixed(1)),
18         TokenTree::Punct(Punct::new('+', Spacing::Alone)),
19         TokenTree::Group(Group::new(
20             Delimiter::None,
21             TokenStream::from_iter(vec![
22                 TokenTree::Literal(Literal::i32_suffixed(2)),
23                 TokenTree::Punct(Punct::new('+', Spacing::Alone)),
24                 TokenTree::Literal(Literal::i32_suffixed(3)),
25             ]),
26         )),
27         TokenTree::Punct(Punct::new('*', Spacing::Alone)),
28         TokenTree::Literal(Literal::i32_suffixed(4)),
29     ]);
30 
31     assert_eq!(tokens.to_string(), "1i32 +  2i32 + 3i32  * 4i32");
32 
33     snapshot!(tokens as Expr, @r###"
34    ⋮Expr::Binary {
35    ⋮    left: Expr::Lit {
36    ⋮        lit: 1,
37    ⋮    },
38    ⋮    op: Add,
39    ⋮    right: Expr::Binary {
40    ⋮        left: Expr::Group {
41    ⋮            expr: Expr::Binary {
42    ⋮                left: Expr::Lit {
43    ⋮                    lit: 2,
44    ⋮                },
45    ⋮                op: Add,
46    ⋮                right: Expr::Lit {
47    ⋮                    lit: 3,
48    ⋮                },
49    ⋮            },
50    ⋮        },
51    ⋮        op: Mul,
52    ⋮        right: Expr::Lit {
53    ⋮            lit: 4,
54    ⋮        },
55    ⋮    },
56    ⋮}
57     "###);
58 }
59