use super :: *;
use the_module :: { parse_quote, qt, code_to_str, tree_print, Result };
tests_impls! {
#[ test ]
fn equation_test() -> Result< () >
{
use syn ::spanned ::Spanned;
use the_module ::equation;
let input = qt!
{
#[ derive( Former ) ]
pub struct Struct1
{
#[ former( default = 31 ) ]
pub int_1: i32,
}
};
let ast = match syn ::parse2 :: < syn ::DeriveInput >( input )
{
Ok( syntax_tree ) => syntax_tree,
Err( err ) => return Err( err ),
};
let fields = match ast.data
{
syn ::Data ::Struct( ref data_struct ) => match data_struct.fields
{
syn ::Fields ::Named( ref fields_named ) =>
{
&fields_named.named
},
_ => return Err( syn ::Error ::new( ast.span(), "Unknown format of data, expected syn ::Fields ::Named( ref fields_named )" ) ),
},
_ => return Err( syn ::Error ::new( ast.span(), "Unknown format of data, expected syn ::Data ::Struct( ref data_struct )" ) ),
};
let attr = fields.first().ok_or_else( || err( "No field" ) )?.attrs.first().ok_or_else( || err( "No attr" ) )?;
let exp = equation ::Equation
{
left: parse_quote!{ default },
op: parse_quote!{ = },
right: parse_quote!{ 31 },
};
let got = equation ::from_meta( &attr )?;
assert_eq!( got.left, exp.left );
assert_eq!( format!( "{:?}", got ), format!( "{:?}", exp ) );
return Ok( () );
fn err( src: &str ) -> syn ::Error
{
syn ::Error ::new( proc_macro2 ::Span ::call_site(), src )
}
}
fn equation_parse_test()
{
let got: the_module ::Equation = syn ::parse_quote!( default = 31 );
tree_print!( got );
assert_eq!( code_to_str!( got ), "default = 31".to_string() );
assert_eq!( got.left, syn ::parse_quote!( default ) );
assert_eq!( got.op, syn ::token ::Eq ::default() );
assert_eq!( code_to_str!( got.right ), "31".to_string() );
}
fn equation_from_meta_test()
{
use the_module ::equation;
let attr1: syn ::Attribute = syn ::parse_quote!( #[ default( 31 ) ] );
tree_print!( attr1 );
let attr1: syn ::Attribute = syn ::parse_quote!( #[ default[ 31 ] ] );
tree_print!( attr1 );
let attr1: syn ::Attribute = syn ::parse_quote!( #[ former( default = 31 ) ] );
let got = equation ::from_meta( &attr1 ).unwrap();
assert_eq!( code_to_str!( got ), "default = 31".to_string() );
assert_eq!( got.left, syn ::parse_quote!( default ) );
assert_eq!( got.op, syn ::token ::Eq ::default() );
assert_eq!( code_to_str!( got.right ), "31".to_string() );
}
}
tests_index! {
equation_test,
equation_parse_test,
equation_from_meta_test,
}