use edres::{Format, Options}; use proc_macro2::TokenStream; use quote::quote; fn assert_str(s: String, q: TokenStream) { assert_eq!(s, q.to_string()); } fn assert_file(p: &str, q: TokenStream) { let s = std::fs::read_to_string(p).unwrap(); assert_str(s, q); } #[test] pub fn generate_structs() { let s = edres::generate_structs("tests/data/struct.yaml", "Struct", &Options::minimal()).unwrap(); assert_str( s, quote!( #[allow(non_camel_case_types)] pub struct Struct { pub name: std::borrow::Cow<'static, str>, pub number: i64, } ), ); } #[test] pub fn generate_structs_from_source() { let source = include_str!("data/struct.yaml"); let s = edres::generate_structs_from_source(source, "Struct", Format::Yaml, &Options::minimal()) .unwrap(); assert_str( s, quote!( #[allow(non_camel_case_types)] pub struct Struct { pub name: std::borrow::Cow<'static, str>, pub number: i64, } ), ); } #[test] pub fn generate_structs_from_files() { let s = edres::generate_structs_from_files("tests/data/files", "Struct", &Options::minimal()) .unwrap(); assert_str( s, quote!( #[allow(non_camel_case_types)] pub struct Struct { pub name: std::borrow::Cow<'static, str>, pub letter: std::borrow::Cow<'static, str>, } ), ); } #[test] pub fn generate_enum() { let s = edres::generate_enum("tests/data/enum.yaml", "Enum", &Options::minimal()).unwrap(); assert_str( s, quote!( pub enum Enum { First, Second, } ), ); } #[test] pub fn generate_enum_from_source() { let source = include_str!("data/enum.yaml"); let s = edres::generate_enum_from_source(source, "Enum", Format::Yaml, &Options::minimal()) .unwrap(); assert_str( s, quote!( pub enum Enum { First, Second, } ), ); } #[test] pub fn generate_enum_from_filenames() { let s = edres::generate_enum_from_filenames("tests/data/files", "Enum", &Options::minimal()) .unwrap(); assert_str( s, quote!( pub enum Enum { Alpha, Beta, } ), ); } #[test] pub fn create_structs() { edres::create_structs( "tests/data/struct.yaml", "tests/output/test1.rs", "Struct", &Options::minimal(), ) .unwrap(); assert_file( "tests/output/test1.rs", quote!( #[allow(non_camel_case_types)] pub struct Struct { pub name: std::borrow::Cow<'static, str>, pub number: i64, } ), ); } #[test] pub fn create_structs_from_source() { let source = include_str!("data/struct.yaml"); edres::create_structs_from_source( source, "tests/output/test2.rs", "Struct", Format::Yaml, &Options::minimal(), ) .unwrap(); assert_file( "tests/output/test2.rs", quote!( #[allow(non_camel_case_types)] pub struct Struct { pub name: std::borrow::Cow<'static, str>, pub number: i64, } ), ); } #[test] pub fn create_structs_from_files() { edres::create_structs_from_files( "tests/data/files", "tests/output/test3.rs", "Struct", &Options::minimal(), ) .unwrap(); assert_file( "tests/output/test3.rs", quote!( #[allow(non_camel_case_types)] pub struct Struct { pub name: std::borrow::Cow<'static, str>, pub letter: std::borrow::Cow<'static, str>, } ), ); } #[test] pub fn create_enum() { edres::create_enum( "tests/data/enum.yaml", "tests/output/test4.rs", "Enum", &Options::minimal(), ) .unwrap(); assert_file( "tests/output/test4.rs", quote!( pub enum Enum { First, Second, } ), ); } #[test] pub fn create_enum_from_source() { let source = include_str!("data/enum.yaml"); edres::create_enum_from_source( source, "tests/output/test5.rs", "Enum", Format::Yaml, &Options::minimal(), ) .unwrap(); assert_file( "tests/output/test5.rs", quote!( pub enum Enum { First, Second, } ), ); } #[test] pub fn create_enum_from_filenames() { edres::create_enum_from_filenames( "tests/data/files", "tests/output/test6.rs", "Enum", &Options::minimal(), ) .unwrap(); assert_file( "tests/output/test6.rs", quote!( pub enum Enum { Alpha, Beta, } ), ); }