/
d.vision
/
division_bindgen_tools
Обзор
Документация
Войти
/
d.vision
/
division_bindgen_tools
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/make_wrapper_for_enum_bindings_tests.rs
67 строк
2 KB
d.vision
Fixed special case enum name handling
12 июн 2025, 15:00
12 июн 2025, 15:00
b33fafa
Код
Авторство
О чём код?
#[cfg(test)] mod tests { use division_bindgen_tools::EnumOptions; use syn::{Item, ItemEnum}; #[test] pub fn cant_make_wrapper_because_enum_variants_are_not_splitted_with_underline() { let source = "#[repr(i32)] pub enum SomeLibEnum { SomeLibEnumValue1 = 0, SomeLibEnumValue2 = 1 }"; let wrapper_source = division_bindgen_tools::make_wrapper_for_enum_bindings(source, "SomeLib").unwrap(); let parsed_wrapper = syn::parse_file(&wrapper_source).unwrap(); assert_eq!(parsed_wrapper.items.len(), 0); } #[test] pub fn make_wrapper_as_expected() { let source = r#" #[repr(i32)] pub enum SomeLibEnum { SOME_LIB_ENUM_VALUE_1 = 0, SOME_LIB_ENUM_VALUE_2 = 1 } "#; let wrapper_source = division_bindgen_tools::make_wrapper_for_enum_bindings(source, "SomeLib").unwrap(); let parsed_wrapper = syn::parse_file(&wrapper_source).unwrap(); let enum_item = find_first_enum(&parsed_wrapper); assert_eq!(enum_item.ident.to_string(), "Enum"); assert_eq!(enum_item.variants[0].ident.to_string(), "Value1"); assert_eq!(enum_item.variants[1].ident.to_string(), "Value2"); } #[test] pub fn make_wrapper_with_special_cases_as_expected() { let source = r#" #[repr(i32)] pub enum SomeLibOtherNameEnum { SOME_VARIANT_1 = 0, SOME_VARIANT_2 = 1 } "#; let wrapper_source = division_bindgen_tools::make_wrapper_for_enum_bindings_with_special_cases( source, "SomeLib", vec![EnumOptions { src_enum_name: "SomeLibOtherNameEnum".to_string(), variant_prefix: "SOME".to_string(), }], ) .unwrap(); let parsed_wrapper = syn::parse_file(&wrapper_source).unwrap(); let enum_item = find_first_enum(&parsed_wrapper); assert_eq!(enum_item.ident.to_string(), "OtherNameEnum"); assert_eq!(enum_item.variants[0].ident.to_string(), "Variant1"); assert_eq!(enum_item.variants[1].ident.to_string(), "Variant2"); } fn find_first_enum(file: &syn::File) -> &ItemEnum { file.items .iter() .find_map(|i| if let Item::Enum(e) = i { Some(e) } else { None }) .unwrap() } }