use super::*;
tests_impls!
{
#[ test ]
fn tree_diagnostics_str_basic()
{
let exp = r#"code : std :: collections :: HashMap < i32 , i32 > :
TokenStream [
Ident {
sym: std,
},
Punct {
char: ':',
spacing: Joint,
},
Punct {
char: ':',
spacing: Alone,
},
Ident {
sym: collections,
},
Punct {
char: ':',
spacing: Joint,
},
Punct {
char: ':',
spacing: Alone,
},
Ident {
sym: HashMap,
},
Punct {
char: '<',
spacing: Alone,
},
Ident {
sym: i32,
},
Punct {
char: ',',
spacing: Alone,
},
Ident {
sym: i32,
},
Punct {
char: '>',
spacing: Alone,
},
]"#;
let code = qt!( std::collections::HashMap< i32, i32 > );
let got = TheModule::tree_diagnostics_str!( code );
a_id!( got, exp );
let got = TheModule::tree_print!( code );
a_id!( got, exp );
}
#[ test ]
fn syn_err_basic()
{
let err = TheModule::syn_err!( "abc" );
a_id!( err.to_string(), "abc" );
let err = TheModule::syn_err!( "abc", );
a_id!( err.to_string(), "abc" );
let code = qt!( core::option::Option< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let err = TheModule::syn_err!( tree_type, "abc" );
a_id!( err.to_string(), "abc" );
let code = qt!( core::option::Option< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let err = TheModule::syn_err!( tree_type, "abc", );
a_id!( err.to_string(), "abc" );
let code = qt!( core::option::Option< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let err = TheModule::syn_err!( tree_type, "abc{}{}", "def", "ghi" );
a_id!( err.to_string(), "abcdefghi" );
let code = qt!( core::option::Option< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let err = TheModule::syn_err!( tree_type, "abc{}{}", "def", "ghi", );
a_id!( err.to_string(), "abcdefghi" );
let err = TheModule::syn_err!( _, "abc" );
a_id!( err.to_string(), "abc" );
let err = TheModule::syn_err!( _, "abc", );
a_id!( err.to_string(), "abc" );
let err = TheModule::syn_err!( _, "abc{}{}", "def", "ghi" );
a_id!( err.to_string(), "abcdefghi" );
let err = TheModule::syn_err!( _, "abc{}{}", "def", "ghi", );
a_id!( err.to_string(), "abcdefghi" );
}
#[ test ]
fn type_container_kind_basic()
{
let code = qt!( core::option::Option< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_container_kind( &tree_type );
a_id!( got, TheModule::ContainerKind::No );
let code = qt!( core::option::Option< Vec > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_container_kind( &tree_type );
a_id!( got, TheModule::ContainerKind::No );
let code = qt!( alloc::vec::Vec< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_container_kind( &tree_type );
a_id!( got, TheModule::ContainerKind::Vector );
let code = qt!( alloc::vec::Vec );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_container_kind( &tree_type );
a_id!( got, TheModule::ContainerKind::Vector );
let code = qt!( std::vec::Vec< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_container_kind( &tree_type );
a_id!( got, TheModule::ContainerKind::Vector );
let code = qt!( std::vec::Vec );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_container_kind( &tree_type );
a_id!( got, TheModule::ContainerKind::Vector );
let code = qt!( std::Vec< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_container_kind( &tree_type );
a_id!( got, TheModule::ContainerKind::Vector );
let code = qt!( std::Vec );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_container_kind( &tree_type );
a_id!( got, TheModule::ContainerKind::Vector );
let code = qt!( std::SomeVector< i32, i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_container_kind( &tree_type );
a_id!( got, TheModule::ContainerKind::No );
let code = qt!( std::collections::HashMap< i32, i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_container_kind( &tree_type );
a_id!( got, TheModule::ContainerKind::HashMap );
let code = qt!( std::collections::HashSet< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_container_kind( &tree_type );
a_id!( got, TheModule::ContainerKind::HashSet );
}
#[ test ]
fn type_optional_container_kind_basic()
{
let code = qt!( i32 );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::No, false ) );
let code = qt!( core::option::Option< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::No, true ) );
let code = qt!( Option< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::No, true ) );
let code = qt!( core::option::Option< Vec > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::Vector, true ) );
let code = qt!( Option< Vec > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::Vector, true ) );
let code = qt!( std::Vec< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::Vector, false ) );
let code = qt!( core::option::Option< std::collections::HashMap< i32, i32 > > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::HashMap, true ) );
let code = qt!( Option< HashMap > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::HashMap, true ) );
let code = qt!( HashMap< i32, i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::HashMap, false ) );
let code = qt!( core::option::Option< std::collections::HashSet< i32, i32 > > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::HashSet, true ) );
let code = qt!( Option< HashSet > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::HashSet, true ) );
let code = qt!( HashSet< i32, i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_optional_container_kind( &tree_type );
a_id!( got, ( TheModule::ContainerKind::HashSet, false ) );
}
#[ test ]
fn type_rightmost_basic()
{
let code = qt!( core::option::Option< i32 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got = TheModule::type_rightmost( &tree_type );
a_id!( got, Some( "Option".to_string() ) );
}
#[ test ]
fn type_parameters_basic()
{
macro_rules! q
{
( $( $Src : tt )+ ) =>
{
syn::parse2::< syn::Type >( qt!( $( $Src )+ ) ).unwrap()
}
}
let code = qt!( core::option::Option< i8, i16, i32, i64 > );
let tree_type = syn::parse2::< syn::Type >( code ).unwrap();
let got : Vec< syn::Type > = TheModule::type_parameters( &tree_type, 0..=0 ).into_iter().cloned().collect();
let exp = vec![ q!( i8 ) ];
a_id!( got, exp );
let got : Vec< syn::Type > = TheModule::type_parameters( &tree_type, 0..=1 ).into_iter().cloned().collect();
let exp = vec![ q!( i8 ), q!( i16 ) ];
a_id!( got, exp );
let got : Vec< syn::Type > = TheModule::type_parameters( &tree_type, 0..=2 ).into_iter().cloned().collect();
let exp = vec![ q!( i8 ), q!( i16 ), q!( i32 ) ];
a_id!( got, exp );
let got : Vec< syn::Type > = TheModule::type_parameters( &tree_type, 0..0 ).into_iter().cloned().collect();
let exp : Vec< syn::Type > = vec![];
a_id!( got, exp );
let got : Vec< syn::Type > = TheModule::type_parameters( &tree_type, 0..1 ).into_iter().cloned().collect();
let exp = vec![ q!( i8 ) ];
a_id!( got, exp );
let got : Vec< syn::Type > = TheModule::type_parameters( &tree_type, 0..2 ).into_iter().cloned().collect();
let exp = vec![ q!( i8 ), q!( i16 ) ];
a_id!( got, exp );
}
}
tests_index!
{
tree_diagnostics_str_basic,
syn_err_basic,
type_container_kind_basic,
type_optional_container_kind_basic,
type_rightmost_basic,
type_parameters_basic,
}