test_stmt.rs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #![allow(clippy::non_ascii_literal)]
  2. #[macro_use]
  3. mod macros;
  4. use proc_macro2::{Delimiter, Group, Ident, Span, TokenStream, TokenTree};
  5. use quote::quote;
  6. use std::iter::FromIterator;
  7. use syn::Stmt;
  8. #[test]
  9. fn test_raw_operator() {
  10. let stmt = syn::parse_str::<Stmt>("let _ = &raw const x;").unwrap();
  11. snapshot!(stmt, @r###"
  12. Local(Local {
  13. pat: Pat::Wild,
  14. init: Some(Verbatim(`& raw const x`)),
  15. })
  16. "###);
  17. }
  18. #[test]
  19. fn test_raw_variable() {
  20. let stmt = syn::parse_str::<Stmt>("let _ = &raw;").unwrap();
  21. snapshot!(stmt, @r###"
  22. Local(Local {
  23. pat: Pat::Wild,
  24. init: Some(Expr::Reference {
  25. expr: Expr::Path {
  26. path: Path {
  27. segments: [
  28. PathSegment {
  29. ident: "raw",
  30. arguments: None,
  31. },
  32. ],
  33. },
  34. },
  35. }),
  36. })
  37. "###);
  38. }
  39. #[test]
  40. fn test_raw_invalid() {
  41. assert!(syn::parse_str::<Stmt>("let _ = &raw x;").is_err());
  42. }
  43. #[test]
  44. fn test_none_group() {
  45. // <Ø async fn f() {} Ø>
  46. let tokens = TokenStream::from_iter(vec![TokenTree::Group(Group::new(
  47. Delimiter::None,
  48. TokenStream::from_iter(vec![
  49. TokenTree::Ident(Ident::new("async", Span::call_site())),
  50. TokenTree::Ident(Ident::new("fn", Span::call_site())),
  51. TokenTree::Ident(Ident::new("f", Span::call_site())),
  52. TokenTree::Group(Group::new(Delimiter::Parenthesis, TokenStream::new())),
  53. TokenTree::Group(Group::new(Delimiter::Brace, TokenStream::new())),
  54. ]),
  55. ))]);
  56. snapshot!(tokens as Stmt, @r###"
  57. Item(Item::Fn {
  58. vis: Inherited,
  59. sig: Signature {
  60. asyncness: Some,
  61. ident: "f",
  62. generics: Generics,
  63. output: Default,
  64. },
  65. block: Block,
  66. })
  67. "###);
  68. }
  69. #[test]
  70. fn test_let_dot_dot() {
  71. let tokens = quote! {
  72. let .. = 10;
  73. };
  74. snapshot!(tokens as Stmt, @r###"
  75. Local(Local {
  76. pat: Pat::Rest,
  77. init: Some(Expr::Lit {
  78. lit: 10,
  79. }),
  80. })
  81. "###);
  82. }