|  | #![allow(dead_code)] | 
|  | //! These tests verify that multiple errors will be collected up from throughout | 
|  | //! the parsing process and returned correctly to the caller. | 
|  |  | 
|  | use darling::{ast, FromDeriveInput, FromField, FromMeta}; | 
|  | use syn::parse_quote; | 
|  |  | 
|  | #[derive(Debug, FromDeriveInput)] | 
|  | #[darling(attributes(accrue))] | 
|  | struct Lorem { | 
|  | ipsum: String, | 
|  | dolor: Dolor, | 
|  | data: ast::Data<(), LoremField>, | 
|  | } | 
|  |  | 
|  | #[derive(Debug, FromMeta)] | 
|  | struct Dolor { | 
|  | sit: bool, | 
|  | } | 
|  |  | 
|  | #[derive(Debug, FromField)] | 
|  | #[darling(attributes(accrue))] | 
|  | struct LoremField { | 
|  | ident: Option<syn::Ident>, | 
|  | aliased_as: syn::Ident, | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn bad_type_and_missing_fields() { | 
|  | let input = parse_quote! { | 
|  | #[accrue(ipsum = true, dolor(amet = "Hi"))] | 
|  | pub struct NonConforming { | 
|  | foo: () | 
|  | } | 
|  | }; | 
|  |  | 
|  | let s_result: ::darling::Error = Lorem::from_derive_input(&input).unwrap_err(); | 
|  | let err = s_result.flatten(); | 
|  | println!("{}", err); | 
|  | assert_eq!(3, err.len()); | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn body_only_issues() { | 
|  | let input = parse_quote! { | 
|  | #[accrue(ipsum = "Hello", dolor(sit))] | 
|  | pub struct NonConforming { | 
|  | foo: (), | 
|  | bar: bool, | 
|  | } | 
|  | }; | 
|  |  | 
|  | let s_err = Lorem::from_derive_input(&input).unwrap_err(); | 
|  | println!("{:?}", s_err); | 
|  | assert_eq!(2, s_err.len()); | 
|  | } | 
|  |  | 
|  | #[derive(Debug, FromMeta)] | 
|  | enum Week { | 
|  | Monday, | 
|  | Tuesday { morning: bool, afternoon: String }, | 
|  | Wednesday(Dolor), | 
|  | } | 
|  |  | 
|  | #[derive(Debug, FromDeriveInput)] | 
|  | #[darling(attributes(accrue))] | 
|  | struct Month { | 
|  | schedule: Week, | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn error_in_enum_fields() { | 
|  | let input = parse_quote! { | 
|  | #[accrue(schedule(tuesday(morning = "yes")))] | 
|  | pub struct NonConforming { | 
|  | foo: (), | 
|  | bar: bool, | 
|  | } | 
|  | }; | 
|  |  | 
|  | let s_err = Month::from_derive_input(&input).unwrap_err(); | 
|  | assert_eq!(2, s_err.len()); | 
|  | let err = s_err.flatten(); | 
|  | // TODO add tests to check location path is correct | 
|  | println!("{}", err); | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn error_in_newtype_variant() { | 
|  | let input = parse_quote! { | 
|  | #[accrue(schedule(wednesday(sit = "yes")))] | 
|  | pub struct NonConforming { | 
|  | foo: (), | 
|  | bar: bool, | 
|  | } | 
|  | }; | 
|  |  | 
|  | let s_err = Month::from_derive_input(&input).unwrap_err(); | 
|  | assert_eq!(1, s_err.len()); | 
|  | println!("{}", s_err); | 
|  | println!("{}", s_err.flatten()); | 
|  | } |