1fad3a1d3Sopenharmony_ci#![allow(clippy::uninlined_format_args)]
2fad3a1d3Sopenharmony_ci
3fad3a1d3Sopenharmony_ci#[macro_use]
4fad3a1d3Sopenharmony_cimod macros;
5fad3a1d3Sopenharmony_ci
6fad3a1d3Sopenharmony_ciuse syn::{parse_quote, TraitItemFn};
7fad3a1d3Sopenharmony_ci
8fad3a1d3Sopenharmony_ci#[test]
9fad3a1d3Sopenharmony_cifn test_by_value() {
10fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
11fad3a1d3Sopenharmony_ci        fn by_value(self: Self);
12fad3a1d3Sopenharmony_ci    };
13fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
14fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
15fad3a1d3Sopenharmony_ci        colon_token: Some,
16fad3a1d3Sopenharmony_ci        ty: Type::Path {
17fad3a1d3Sopenharmony_ci            path: Path {
18fad3a1d3Sopenharmony_ci                segments: [
19fad3a1d3Sopenharmony_ci                    PathSegment {
20fad3a1d3Sopenharmony_ci                        ident: "Self",
21fad3a1d3Sopenharmony_ci                    },
22fad3a1d3Sopenharmony_ci                ],
23fad3a1d3Sopenharmony_ci            },
24fad3a1d3Sopenharmony_ci        },
25fad3a1d3Sopenharmony_ci    })
26fad3a1d3Sopenharmony_ci    "###);
27fad3a1d3Sopenharmony_ci}
28fad3a1d3Sopenharmony_ci
29fad3a1d3Sopenharmony_ci#[test]
30fad3a1d3Sopenharmony_cifn test_by_mut_value() {
31fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
32fad3a1d3Sopenharmony_ci        fn by_mut(mut self: Self);
33fad3a1d3Sopenharmony_ci    };
34fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
35fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
36fad3a1d3Sopenharmony_ci        mutability: Some,
37fad3a1d3Sopenharmony_ci        colon_token: Some,
38fad3a1d3Sopenharmony_ci        ty: Type::Path {
39fad3a1d3Sopenharmony_ci            path: Path {
40fad3a1d3Sopenharmony_ci                segments: [
41fad3a1d3Sopenharmony_ci                    PathSegment {
42fad3a1d3Sopenharmony_ci                        ident: "Self",
43fad3a1d3Sopenharmony_ci                    },
44fad3a1d3Sopenharmony_ci                ],
45fad3a1d3Sopenharmony_ci            },
46fad3a1d3Sopenharmony_ci        },
47fad3a1d3Sopenharmony_ci    })
48fad3a1d3Sopenharmony_ci    "###);
49fad3a1d3Sopenharmony_ci}
50fad3a1d3Sopenharmony_ci
51fad3a1d3Sopenharmony_ci#[test]
52fad3a1d3Sopenharmony_cifn test_by_ref() {
53fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
54fad3a1d3Sopenharmony_ci        fn by_ref(self: &Self);
55fad3a1d3Sopenharmony_ci    };
56fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
57fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
58fad3a1d3Sopenharmony_ci        colon_token: Some,
59fad3a1d3Sopenharmony_ci        ty: Type::Reference {
60fad3a1d3Sopenharmony_ci            elem: Type::Path {
61fad3a1d3Sopenharmony_ci                path: Path {
62fad3a1d3Sopenharmony_ci                    segments: [
63fad3a1d3Sopenharmony_ci                        PathSegment {
64fad3a1d3Sopenharmony_ci                            ident: "Self",
65fad3a1d3Sopenharmony_ci                        },
66fad3a1d3Sopenharmony_ci                    ],
67fad3a1d3Sopenharmony_ci                },
68fad3a1d3Sopenharmony_ci            },
69fad3a1d3Sopenharmony_ci        },
70fad3a1d3Sopenharmony_ci    })
71fad3a1d3Sopenharmony_ci    "###);
72fad3a1d3Sopenharmony_ci}
73fad3a1d3Sopenharmony_ci
74fad3a1d3Sopenharmony_ci#[test]
75fad3a1d3Sopenharmony_cifn test_by_box() {
76fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
77fad3a1d3Sopenharmony_ci        fn by_box(self: Box<Self>);
78fad3a1d3Sopenharmony_ci    };
79fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
80fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
81fad3a1d3Sopenharmony_ci        colon_token: Some,
82fad3a1d3Sopenharmony_ci        ty: Type::Path {
83fad3a1d3Sopenharmony_ci            path: Path {
84fad3a1d3Sopenharmony_ci                segments: [
85fad3a1d3Sopenharmony_ci                    PathSegment {
86fad3a1d3Sopenharmony_ci                        ident: "Box",
87fad3a1d3Sopenharmony_ci                        arguments: PathArguments::AngleBracketed {
88fad3a1d3Sopenharmony_ci                            args: [
89fad3a1d3Sopenharmony_ci                                GenericArgument::Type(Type::Path {
90fad3a1d3Sopenharmony_ci                                    path: Path {
91fad3a1d3Sopenharmony_ci                                        segments: [
92fad3a1d3Sopenharmony_ci                                            PathSegment {
93fad3a1d3Sopenharmony_ci                                                ident: "Self",
94fad3a1d3Sopenharmony_ci                                            },
95fad3a1d3Sopenharmony_ci                                        ],
96fad3a1d3Sopenharmony_ci                                    },
97fad3a1d3Sopenharmony_ci                                }),
98fad3a1d3Sopenharmony_ci                            ],
99fad3a1d3Sopenharmony_ci                        },
100fad3a1d3Sopenharmony_ci                    },
101fad3a1d3Sopenharmony_ci                ],
102fad3a1d3Sopenharmony_ci            },
103fad3a1d3Sopenharmony_ci        },
104fad3a1d3Sopenharmony_ci    })
105fad3a1d3Sopenharmony_ci    "###);
106fad3a1d3Sopenharmony_ci}
107fad3a1d3Sopenharmony_ci
108fad3a1d3Sopenharmony_ci#[test]
109fad3a1d3Sopenharmony_cifn test_by_pin() {
110fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
111fad3a1d3Sopenharmony_ci        fn by_pin(self: Pin<Self>);
112fad3a1d3Sopenharmony_ci    };
113fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
114fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
115fad3a1d3Sopenharmony_ci        colon_token: Some,
116fad3a1d3Sopenharmony_ci        ty: Type::Path {
117fad3a1d3Sopenharmony_ci            path: Path {
118fad3a1d3Sopenharmony_ci                segments: [
119fad3a1d3Sopenharmony_ci                    PathSegment {
120fad3a1d3Sopenharmony_ci                        ident: "Pin",
121fad3a1d3Sopenharmony_ci                        arguments: PathArguments::AngleBracketed {
122fad3a1d3Sopenharmony_ci                            args: [
123fad3a1d3Sopenharmony_ci                                GenericArgument::Type(Type::Path {
124fad3a1d3Sopenharmony_ci                                    path: Path {
125fad3a1d3Sopenharmony_ci                                        segments: [
126fad3a1d3Sopenharmony_ci                                            PathSegment {
127fad3a1d3Sopenharmony_ci                                                ident: "Self",
128fad3a1d3Sopenharmony_ci                                            },
129fad3a1d3Sopenharmony_ci                                        ],
130fad3a1d3Sopenharmony_ci                                    },
131fad3a1d3Sopenharmony_ci                                }),
132fad3a1d3Sopenharmony_ci                            ],
133fad3a1d3Sopenharmony_ci                        },
134fad3a1d3Sopenharmony_ci                    },
135fad3a1d3Sopenharmony_ci                ],
136fad3a1d3Sopenharmony_ci            },
137fad3a1d3Sopenharmony_ci        },
138fad3a1d3Sopenharmony_ci    })
139fad3a1d3Sopenharmony_ci    "###);
140fad3a1d3Sopenharmony_ci}
141fad3a1d3Sopenharmony_ci
142fad3a1d3Sopenharmony_ci#[test]
143fad3a1d3Sopenharmony_cifn test_explicit_type() {
144fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
145fad3a1d3Sopenharmony_ci        fn explicit_type(self: Pin<MyType>);
146fad3a1d3Sopenharmony_ci    };
147fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
148fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
149fad3a1d3Sopenharmony_ci        colon_token: Some,
150fad3a1d3Sopenharmony_ci        ty: Type::Path {
151fad3a1d3Sopenharmony_ci            path: Path {
152fad3a1d3Sopenharmony_ci                segments: [
153fad3a1d3Sopenharmony_ci                    PathSegment {
154fad3a1d3Sopenharmony_ci                        ident: "Pin",
155fad3a1d3Sopenharmony_ci                        arguments: PathArguments::AngleBracketed {
156fad3a1d3Sopenharmony_ci                            args: [
157fad3a1d3Sopenharmony_ci                                GenericArgument::Type(Type::Path {
158fad3a1d3Sopenharmony_ci                                    path: Path {
159fad3a1d3Sopenharmony_ci                                        segments: [
160fad3a1d3Sopenharmony_ci                                            PathSegment {
161fad3a1d3Sopenharmony_ci                                                ident: "MyType",
162fad3a1d3Sopenharmony_ci                                            },
163fad3a1d3Sopenharmony_ci                                        ],
164fad3a1d3Sopenharmony_ci                                    },
165fad3a1d3Sopenharmony_ci                                }),
166fad3a1d3Sopenharmony_ci                            ],
167fad3a1d3Sopenharmony_ci                        },
168fad3a1d3Sopenharmony_ci                    },
169fad3a1d3Sopenharmony_ci                ],
170fad3a1d3Sopenharmony_ci            },
171fad3a1d3Sopenharmony_ci        },
172fad3a1d3Sopenharmony_ci    })
173fad3a1d3Sopenharmony_ci    "###);
174fad3a1d3Sopenharmony_ci}
175fad3a1d3Sopenharmony_ci
176fad3a1d3Sopenharmony_ci#[test]
177fad3a1d3Sopenharmony_cifn test_value_shorthand() {
178fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
179fad3a1d3Sopenharmony_ci        fn value_shorthand(self);
180fad3a1d3Sopenharmony_ci    };
181fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
182fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
183fad3a1d3Sopenharmony_ci        ty: Type::Path {
184fad3a1d3Sopenharmony_ci            path: Path {
185fad3a1d3Sopenharmony_ci                segments: [
186fad3a1d3Sopenharmony_ci                    PathSegment {
187fad3a1d3Sopenharmony_ci                        ident: "Self",
188fad3a1d3Sopenharmony_ci                    },
189fad3a1d3Sopenharmony_ci                ],
190fad3a1d3Sopenharmony_ci            },
191fad3a1d3Sopenharmony_ci        },
192fad3a1d3Sopenharmony_ci    })
193fad3a1d3Sopenharmony_ci    "###);
194fad3a1d3Sopenharmony_ci}
195fad3a1d3Sopenharmony_ci
196fad3a1d3Sopenharmony_ci#[test]
197fad3a1d3Sopenharmony_cifn test_mut_value_shorthand() {
198fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
199fad3a1d3Sopenharmony_ci        fn mut_value_shorthand(mut self);
200fad3a1d3Sopenharmony_ci    };
201fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
202fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
203fad3a1d3Sopenharmony_ci        mutability: Some,
204fad3a1d3Sopenharmony_ci        ty: Type::Path {
205fad3a1d3Sopenharmony_ci            path: Path {
206fad3a1d3Sopenharmony_ci                segments: [
207fad3a1d3Sopenharmony_ci                    PathSegment {
208fad3a1d3Sopenharmony_ci                        ident: "Self",
209fad3a1d3Sopenharmony_ci                    },
210fad3a1d3Sopenharmony_ci                ],
211fad3a1d3Sopenharmony_ci            },
212fad3a1d3Sopenharmony_ci        },
213fad3a1d3Sopenharmony_ci    })
214fad3a1d3Sopenharmony_ci    "###);
215fad3a1d3Sopenharmony_ci}
216fad3a1d3Sopenharmony_ci
217fad3a1d3Sopenharmony_ci#[test]
218fad3a1d3Sopenharmony_cifn test_ref_shorthand() {
219fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
220fad3a1d3Sopenharmony_ci        fn ref_shorthand(&self);
221fad3a1d3Sopenharmony_ci    };
222fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
223fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
224fad3a1d3Sopenharmony_ci        reference: Some(None),
225fad3a1d3Sopenharmony_ci        ty: Type::Reference {
226fad3a1d3Sopenharmony_ci            elem: Type::Path {
227fad3a1d3Sopenharmony_ci                path: Path {
228fad3a1d3Sopenharmony_ci                    segments: [
229fad3a1d3Sopenharmony_ci                        PathSegment {
230fad3a1d3Sopenharmony_ci                            ident: "Self",
231fad3a1d3Sopenharmony_ci                        },
232fad3a1d3Sopenharmony_ci                    ],
233fad3a1d3Sopenharmony_ci                },
234fad3a1d3Sopenharmony_ci            },
235fad3a1d3Sopenharmony_ci        },
236fad3a1d3Sopenharmony_ci    })
237fad3a1d3Sopenharmony_ci    "###);
238fad3a1d3Sopenharmony_ci}
239fad3a1d3Sopenharmony_ci
240fad3a1d3Sopenharmony_ci#[test]
241fad3a1d3Sopenharmony_cifn test_ref_shorthand_with_lifetime() {
242fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
243fad3a1d3Sopenharmony_ci        fn ref_shorthand(&'a self);
244fad3a1d3Sopenharmony_ci    };
245fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
246fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
247fad3a1d3Sopenharmony_ci        reference: Some(Some(Lifetime {
248fad3a1d3Sopenharmony_ci            ident: "a",
249fad3a1d3Sopenharmony_ci        })),
250fad3a1d3Sopenharmony_ci        ty: Type::Reference {
251fad3a1d3Sopenharmony_ci            lifetime: Some(Lifetime {
252fad3a1d3Sopenharmony_ci                ident: "a",
253fad3a1d3Sopenharmony_ci            }),
254fad3a1d3Sopenharmony_ci            elem: Type::Path {
255fad3a1d3Sopenharmony_ci                path: Path {
256fad3a1d3Sopenharmony_ci                    segments: [
257fad3a1d3Sopenharmony_ci                        PathSegment {
258fad3a1d3Sopenharmony_ci                            ident: "Self",
259fad3a1d3Sopenharmony_ci                        },
260fad3a1d3Sopenharmony_ci                    ],
261fad3a1d3Sopenharmony_ci                },
262fad3a1d3Sopenharmony_ci            },
263fad3a1d3Sopenharmony_ci        },
264fad3a1d3Sopenharmony_ci    })
265fad3a1d3Sopenharmony_ci    "###);
266fad3a1d3Sopenharmony_ci}
267fad3a1d3Sopenharmony_ci
268fad3a1d3Sopenharmony_ci#[test]
269fad3a1d3Sopenharmony_cifn test_ref_mut_shorthand() {
270fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
271fad3a1d3Sopenharmony_ci        fn ref_mut_shorthand(&mut self);
272fad3a1d3Sopenharmony_ci    };
273fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
274fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
275fad3a1d3Sopenharmony_ci        reference: Some(None),
276fad3a1d3Sopenharmony_ci        mutability: Some,
277fad3a1d3Sopenharmony_ci        ty: Type::Reference {
278fad3a1d3Sopenharmony_ci            mutability: Some,
279fad3a1d3Sopenharmony_ci            elem: Type::Path {
280fad3a1d3Sopenharmony_ci                path: Path {
281fad3a1d3Sopenharmony_ci                    segments: [
282fad3a1d3Sopenharmony_ci                        PathSegment {
283fad3a1d3Sopenharmony_ci                            ident: "Self",
284fad3a1d3Sopenharmony_ci                        },
285fad3a1d3Sopenharmony_ci                    ],
286fad3a1d3Sopenharmony_ci                },
287fad3a1d3Sopenharmony_ci            },
288fad3a1d3Sopenharmony_ci        },
289fad3a1d3Sopenharmony_ci    })
290fad3a1d3Sopenharmony_ci    "###);
291fad3a1d3Sopenharmony_ci}
292fad3a1d3Sopenharmony_ci
293fad3a1d3Sopenharmony_ci#[test]
294fad3a1d3Sopenharmony_cifn test_ref_mut_shorthand_with_lifetime() {
295fad3a1d3Sopenharmony_ci    let TraitItemFn { sig, .. } = parse_quote! {
296fad3a1d3Sopenharmony_ci        fn ref_mut_shorthand(&'a mut self);
297fad3a1d3Sopenharmony_ci    };
298fad3a1d3Sopenharmony_ci    snapshot!(&sig.inputs[0], @r###"
299fad3a1d3Sopenharmony_ci    FnArg::Receiver(Receiver {
300fad3a1d3Sopenharmony_ci        reference: Some(Some(Lifetime {
301fad3a1d3Sopenharmony_ci            ident: "a",
302fad3a1d3Sopenharmony_ci        })),
303fad3a1d3Sopenharmony_ci        mutability: Some,
304fad3a1d3Sopenharmony_ci        ty: Type::Reference {
305fad3a1d3Sopenharmony_ci            lifetime: Some(Lifetime {
306fad3a1d3Sopenharmony_ci                ident: "a",
307fad3a1d3Sopenharmony_ci            }),
308fad3a1d3Sopenharmony_ci            mutability: Some,
309fad3a1d3Sopenharmony_ci            elem: Type::Path {
310fad3a1d3Sopenharmony_ci                path: Path {
311fad3a1d3Sopenharmony_ci                    segments: [
312fad3a1d3Sopenharmony_ci                        PathSegment {
313fad3a1d3Sopenharmony_ci                            ident: "Self",
314fad3a1d3Sopenharmony_ci                        },
315fad3a1d3Sopenharmony_ci                    ],
316fad3a1d3Sopenharmony_ci                },
317fad3a1d3Sopenharmony_ci            },
318fad3a1d3Sopenharmony_ci        },
319fad3a1d3Sopenharmony_ci    })
320fad3a1d3Sopenharmony_ci    "###);
321fad3a1d3Sopenharmony_ci}
322