From f23c97b951fb6ccd18e88f823011e6caeb639dc5 Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Tue, 29 Nov 2022 14:23:17 +0000 Subject: [PATCH] misk: add tests --- --- a/crates/evm-coder/procedural/src/abi_derive.rs +++ b/crates/evm-coder/procedural/src/abi_derive.rs @@ -79,7 +79,7 @@ let abi_type = impl_enum_abi_type(name); let abi_read = impl_enum_abi_read(name); let abi_write = impl_enum_abi_write(name); - let solidity_type_name = impl_enum_solidity_type_name(name, enum_options.clone()); + let solidity_type_name = impl_enum_solidity_type_name(name); let solidity_struct_collect = impl_enum_solidity_struct_collect(name, enum_options, option_count); @@ -105,6 +105,7 @@ quote!(#name::#opt => #as_string,) }); quote!( + #[cfg(feature = "stubgen")] impl ::evm_coder::solidity::SolidityEnum for #name { fn solidity_option(&self) -> &str { match <#name>::default() { @@ -176,11 +177,7 @@ ) } -fn impl_enum_solidity_type_name<'a>( - name: &syn::Ident, - enum_options: impl Iterator, -) -> proc_macro2::TokenStream { - let enum_options = enum_options.map(|opt| quote!(,)); +fn impl_enum_solidity_type_name<'a>(name: &syn::Ident) -> proc_macro2::TokenStream { quote!( #[cfg(feature = "stubgen")] impl ::evm_coder::solidity::SolidityTypeName for #name { --- a/crates/evm-coder/tests/abi_derive_generation.rs +++ b/crates/evm-coder/tests/abi_derive_generation.rs @@ -739,11 +739,19 @@ mod test_enum { use evm_coder::AbiCoder; - #[derive(AbiCoder, Default)] + /// Some docs + /// At multi + /// line + #[derive(AbiCoder, Debug, PartialEq, Default)] #[repr(u8)] enum Color { + /// Docs for Red + /// multi + /// line Red, + /// Docs for Green Green, + /// Docs for Blue #[default] Blue, } @@ -756,4 +764,82 @@ let t = trybuild::TestCases::new(); t.compile_fail("tests/build_failed/abi_derive_enum_generation.rs"); } + + #[test] + fn impl_abi_type_signature_same_for_structs() { + assert_eq!( + ::SIGNATURE + .as_str() + .unwrap(), + ::SIGNATURE.as_str().unwrap() + ); + } + + #[test] + fn impl_abi_type_is_dynamic_same_for_structs() { + assert_eq!( + ::is_dynamic(), + ::is_dynamic() + ); + } + + #[test] + fn impl_abi_type_size_same_for_structs() { + assert_eq!( + ::size(), + ::size() + ); + } + + #[test] + fn test_coder() { + const FUNCTION_IDENTIFIER: u32 = 0xdeadbeef; + + let encoded_enum = { + let mut writer = evm_coder::abi::AbiWriter::new_call(FUNCTION_IDENTIFIER); + ::abi_write(&Color::Green, &mut writer); + writer.finish() + }; + + let encoded_u8 = { + let mut writer = evm_coder::abi::AbiWriter::new_call(FUNCTION_IDENTIFIER); + ::abi_write(&(Color::Green as u8), &mut writer); + writer.finish() + }; + + similar_asserts::assert_eq!(encoded_enum, encoded_u8); + + { + let (_, mut decoder) = evm_coder::abi::AbiReader::new_call(&encoded_enum).unwrap(); + let restored_enum_data = + ::abi_read(&mut decoder).unwrap(); + assert_eq!(restored_enum_data, Color::Green); + } + } + + #[test] + #[cfg(feature = "stubgen")] + fn struct_collect_enum() { + assert_eq!( + ::name(), + "Color" + ); + assert_eq!( + ::declaration(), + r#"/// @dev Some docs +/// At multi +/// line +enum Color { + /// @dev Docs for A + /// multi + /// line + Red, + /// @dev Docs for B + Green, + /// @dev Docs for C + Blue +} +"# + ); + } } -- gitstuff