test_pat.rs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #[macro_use]
  2. mod macros;
  3. use proc_macro2::{Delimiter, Group, TokenStream, TokenTree};
  4. use quote::quote;
  5. use std::iter::FromIterator;
  6. use syn::{Item, Pat, Stmt};
  7. #[test]
  8. fn test_pat_ident() {
  9. match syn::parse2(quote!(self)).unwrap() {
  10. Pat::Ident(_) => (),
  11. value => panic!("expected PatIdent, got {:?}", value),
  12. }
  13. }
  14. #[test]
  15. fn test_pat_path() {
  16. match syn::parse2(quote!(self::CONST)).unwrap() {
  17. Pat::Path(_) => (),
  18. value => panic!("expected PatPath, got {:?}", value),
  19. }
  20. }
  21. #[test]
  22. fn test_leading_vert() {
  23. // https://github.com/rust-lang/rust/blob/1.43.0/src/test/ui/or-patterns/remove-leading-vert.rs
  24. syn::parse_str::<Item>("fn f() {}").unwrap();
  25. syn::parse_str::<Item>("fn fun1(| A: E) {}").unwrap_err();
  26. syn::parse_str::<Item>("fn fun2(|| A: E) {}").unwrap_err();
  27. syn::parse_str::<Stmt>("let | () = ();").unwrap();
  28. syn::parse_str::<Stmt>("let (| A): E;").unwrap();
  29. syn::parse_str::<Stmt>("let (|| A): (E);").unwrap_err();
  30. syn::parse_str::<Stmt>("let (| A,): (E,);").unwrap();
  31. syn::parse_str::<Stmt>("let [| A]: [E; 1];").unwrap();
  32. syn::parse_str::<Stmt>("let [|| A]: [E; 1];").unwrap_err();
  33. syn::parse_str::<Stmt>("let TS(| A): TS;").unwrap();
  34. syn::parse_str::<Stmt>("let TS(|| A): TS;").unwrap_err();
  35. syn::parse_str::<Stmt>("let NS { f: | A }: NS;").unwrap();
  36. syn::parse_str::<Stmt>("let NS { f: || A }: NS;").unwrap_err();
  37. }
  38. #[test]
  39. fn test_group() {
  40. let group = Group::new(Delimiter::None, quote!(Some(_)));
  41. let tokens = TokenStream::from_iter(vec![TokenTree::Group(group)]);
  42. snapshot!(tokens as Pat, @r###"
  43. Pat::TupleStruct {
  44. path: Path {
  45. segments: [
  46. PathSegment {
  47. ident: "Some",
  48. arguments: None,
  49. },
  50. ],
  51. },
  52. pat: PatTuple {
  53. elems: [
  54. Pat::Wild,
  55. ],
  56. },
  57. }
  58. "###);
  59. }