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