]> git.proxmox.com Git - rustc.git/blame - vendor/syn/tests/test_pat.rs
Merge 1.70 into proxmox/bookworm
[rustc.git] / vendor / syn / tests / test_pat.rs
CommitLineData
353b0b11
FG
1#![allow(clippy::uninlined_format_args)]
2
29967ef6
XL
3#[macro_use]
4mod macros;
5
6use proc_macro2::{Delimiter, Group, TokenStream, TokenTree};
e74abb32 7use quote::quote;
353b0b11 8use syn::parse::Parser;
f035d41b 9use syn::{Item, Pat, Stmt};
e74abb32
XL
10
11#[test]
12fn test_pat_ident() {
353b0b11 13 match Pat::parse_single.parse2(quote!(self)).unwrap() {
e74abb32
XL
14 Pat::Ident(_) => (),
15 value => panic!("expected PatIdent, got {:?}", value),
16 }
17}
18
19#[test]
20fn test_pat_path() {
353b0b11 21 match Pat::parse_single.parse2(quote!(self::CONST)).unwrap() {
e74abb32
XL
22 Pat::Path(_) => (),
23 value => panic!("expected PatPath, got {:?}", value),
24 }
25}
f035d41b
XL
26
27#[test]
28fn test_leading_vert() {
29 // https://github.com/rust-lang/rust/blob/1.43.0/src/test/ui/or-patterns/remove-leading-vert.rs
30
31 syn::parse_str::<Item>("fn f() {}").unwrap();
32 syn::parse_str::<Item>("fn fun1(| A: E) {}").unwrap_err();
33 syn::parse_str::<Item>("fn fun2(|| A: E) {}").unwrap_err();
34
353b0b11 35 syn::parse_str::<Stmt>("let | () = ();").unwrap_err();
cdc7bbd5 36 syn::parse_str::<Stmt>("let (| A): E;").unwrap();
f035d41b 37 syn::parse_str::<Stmt>("let (|| A): (E);").unwrap_err();
cdc7bbd5
XL
38 syn::parse_str::<Stmt>("let (| A,): (E,);").unwrap();
39 syn::parse_str::<Stmt>("let [| A]: [E; 1];").unwrap();
f035d41b 40 syn::parse_str::<Stmt>("let [|| A]: [E; 1];").unwrap_err();
cdc7bbd5 41 syn::parse_str::<Stmt>("let TS(| A): TS;").unwrap();
f035d41b 42 syn::parse_str::<Stmt>("let TS(|| A): TS;").unwrap_err();
cdc7bbd5 43 syn::parse_str::<Stmt>("let NS { f: | A }: NS;").unwrap();
f035d41b
XL
44 syn::parse_str::<Stmt>("let NS { f: || A }: NS;").unwrap_err();
45}
29967ef6
XL
46
47#[test]
48fn test_group() {
49 let group = Group::new(Delimiter::None, quote!(Some(_)));
50 let tokens = TokenStream::from_iter(vec![TokenTree::Group(group)]);
353b0b11 51 let pat = Pat::parse_single.parse2(tokens).unwrap();
29967ef6 52
353b0b11 53 snapshot!(pat, @r###"
29967ef6
XL
54 Pat::TupleStruct {
55 path: Path {
56 segments: [
57 PathSegment {
58 ident: "Some",
29967ef6
XL
59 },
60 ],
61 },
353b0b11
FG
62 elems: [
63 Pat::Wild,
64 ],
29967ef6
XL
65 }
66 "###);
67}
353b0b11
FG
68
69#[test]
70fn test_ranges() {
71 Pat::parse_single.parse_str("..").unwrap();
72 Pat::parse_single.parse_str("..hi").unwrap();
73 Pat::parse_single.parse_str("lo..").unwrap();
74 Pat::parse_single.parse_str("lo..hi").unwrap();
75
76 Pat::parse_single.parse_str("..=").unwrap_err();
77 Pat::parse_single.parse_str("..=hi").unwrap();
78 Pat::parse_single.parse_str("lo..=").unwrap_err();
79 Pat::parse_single.parse_str("lo..=hi").unwrap();
80
81 Pat::parse_single.parse_str("...").unwrap_err();
82 Pat::parse_single.parse_str("...hi").unwrap_err();
83 Pat::parse_single.parse_str("lo...").unwrap_err();
84 Pat::parse_single.parse_str("lo...hi").unwrap();
85
86 Pat::parse_single.parse_str("[lo..]").unwrap_err();
87 Pat::parse_single.parse_str("[..=hi]").unwrap_err();
88 Pat::parse_single.parse_str("[(lo..)]").unwrap();
89 Pat::parse_single.parse_str("[(..=hi)]").unwrap();
90 Pat::parse_single.parse_str("[lo..=hi]").unwrap();
91
92 Pat::parse_single.parse_str("[_, lo.., _]").unwrap_err();
93 Pat::parse_single.parse_str("[_, ..=hi, _]").unwrap_err();
94 Pat::parse_single.parse_str("[_, (lo..), _]").unwrap();
95 Pat::parse_single.parse_str("[_, (..=hi), _]").unwrap();
96 Pat::parse_single.parse_str("[_, lo..=hi, _]").unwrap();
97}