difftreelog
misk: add tests
in: master
2 files changed
crates/evm-coder/procedural/src/abi_derive.rsdiffbeforeafterboth79 let abi_type = impl_enum_abi_type(name);79 let abi_type = impl_enum_abi_type(name);80 let abi_read = impl_enum_abi_read(name);80 let abi_read = impl_enum_abi_read(name);81 let abi_write = impl_enum_abi_write(name);81 let abi_write = impl_enum_abi_write(name);82 let solidity_type_name = impl_enum_solidity_type_name(name, enum_options.clone());82 let solidity_type_name = impl_enum_solidity_type_name(name);83 let solidity_struct_collect =83 let solidity_struct_collect =84 impl_enum_solidity_struct_collect(name, enum_options, option_count);84 impl_enum_solidity_struct_collect(name, enum_options, option_count);8585105 quote!(#name::#opt => #as_string,)105 quote!(#name::#opt => #as_string,)106 });106 });107 quote!(107 quote!(108 #[cfg(feature = "stubgen")]108 impl ::evm_coder::solidity::SolidityEnum for #name {109 impl ::evm_coder::solidity::SolidityEnum for #name {109 fn solidity_option(&self) -> &str {110 fn solidity_option(&self) -> &str {110 match <#name>::default() {111 match <#name>::default() {177}178}178179179fn impl_enum_solidity_type_name<'a>(180fn impl_enum_solidity_type_name<'a>(name: &syn::Ident) -> proc_macro2::TokenStream {180 name: &syn::Ident,181 enum_options: impl Iterator<Item = &'a syn::Ident>,182) -> proc_macro2::TokenStream {183 let enum_options = enum_options.map(|opt| quote!(,));184 quote!(181 quote!(185 #[cfg(feature = "stubgen")]182 #[cfg(feature = "stubgen")]186 impl ::evm_coder::solidity::SolidityTypeName for #name {183 impl ::evm_coder::solidity::SolidityTypeName for #name {crates/evm-coder/tests/abi_derive_generation.rsdiffbeforeafterboth--- 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!(
+ <Color as evm_coder::abi::AbiType>::SIGNATURE
+ .as_str()
+ .unwrap(),
+ <u8 as evm_coder::abi::AbiType>::SIGNATURE.as_str().unwrap()
+ );
+ }
+
+ #[test]
+ fn impl_abi_type_is_dynamic_same_for_structs() {
+ assert_eq!(
+ <Color as evm_coder::abi::AbiType>::is_dynamic(),
+ <u8 as evm_coder::abi::AbiType>::is_dynamic()
+ );
+ }
+
+ #[test]
+ fn impl_abi_type_size_same_for_structs() {
+ assert_eq!(
+ <Color as evm_coder::abi::AbiType>::size(),
+ <u8 as evm_coder::abi::AbiType>::size()
+ );
+ }
+
+ #[test]
+ fn test_coder() {
+ const FUNCTION_IDENTIFIER: u32 = 0xdeadbeef;
+
+ let encoded_enum = {
+ let mut writer = evm_coder::abi::AbiWriter::new_call(FUNCTION_IDENTIFIER);
+ <Color as evm_coder::abi::AbiWrite>::abi_write(&Color::Green, &mut writer);
+ writer.finish()
+ };
+
+ let encoded_u8 = {
+ let mut writer = evm_coder::abi::AbiWriter::new_call(FUNCTION_IDENTIFIER);
+ <u8 as evm_coder::abi::AbiWrite>::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 =
+ <Color as evm_coder::abi::AbiRead>::abi_read(&mut decoder).unwrap();
+ assert_eq!(restored_enum_data, Color::Green);
+ }
+ }
+
+ #[test]
+ #[cfg(feature = "stubgen")]
+ fn struct_collect_enum() {
+ assert_eq!(
+ <Color as ::evm_coder::solidity::StructCollect>::name(),
+ "Color"
+ );
+ assert_eq!(
+ <Color as ::evm_coder::solidity::StructCollect>::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
+}
+"#
+ );
+ }
}