test_grouping.rs 1.4 KB

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