git.delta.rocks / unique-network / refs/commits / f23c97b951fb

difftreelog

misk: add tests

Trubnikov Sergey2022-11-29parent: #fedf214.patch.diff
in: master

2 files changed

modifiedcrates/evm-coder/procedural/src/abi_derive.rsdiffbeforeafterboth
79 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);
8585
105 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}
178179
179fn 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 {
modifiedcrates/evm-coder/tests/abi_derive_generation.rsdiffbeforeafterboth
739mod test_enum {739mod test_enum {
740 use evm_coder::AbiCoder;740 use evm_coder::AbiCoder;
741741
742 /// Some docs
743 /// At multi
744 /// line
742 #[derive(AbiCoder, Default)]745 #[derive(AbiCoder, Debug, PartialEq, Default)]
743 #[repr(u8)]746 #[repr(u8)]
744 enum Color {747 enum Color {
748 /// Docs for Red
749 /// multi
750 /// line
745 Red,751 Red,
752 /// Docs for Green
746 Green,753 Green,
754 /// Docs for Blue
747 #[default]755 #[default]
748 Blue,756 Blue,
749 }757 }
757 t.compile_fail("tests/build_failed/abi_derive_enum_generation.rs");765 t.compile_fail("tests/build_failed/abi_derive_enum_generation.rs");
758 }766 }
767
768 #[test]
769 fn impl_abi_type_signature_same_for_structs() {
770 assert_eq!(
771 <Color as evm_coder::abi::AbiType>::SIGNATURE
772 .as_str()
773 .unwrap(),
774 <u8 as evm_coder::abi::AbiType>::SIGNATURE.as_str().unwrap()
775 );
776 }
777
778 #[test]
779 fn impl_abi_type_is_dynamic_same_for_structs() {
780 assert_eq!(
781 <Color as evm_coder::abi::AbiType>::is_dynamic(),
782 <u8 as evm_coder::abi::AbiType>::is_dynamic()
783 );
784 }
785
786 #[test]
787 fn impl_abi_type_size_same_for_structs() {
788 assert_eq!(
789 <Color as evm_coder::abi::AbiType>::size(),
790 <u8 as evm_coder::abi::AbiType>::size()
791 );
792 }
793
794 #[test]
795 fn test_coder() {
796 const FUNCTION_IDENTIFIER: u32 = 0xdeadbeef;
797
798 let encoded_enum = {
799 let mut writer = evm_coder::abi::AbiWriter::new_call(FUNCTION_IDENTIFIER);
800 <Color as evm_coder::abi::AbiWrite>::abi_write(&Color::Green, &mut writer);
801 writer.finish()
802 };
803
804 let encoded_u8 = {
805 let mut writer = evm_coder::abi::AbiWriter::new_call(FUNCTION_IDENTIFIER);
806 <u8 as evm_coder::abi::AbiWrite>::abi_write(&(Color::Green as u8), &mut writer);
807 writer.finish()
808 };
809
810 similar_asserts::assert_eq!(encoded_enum, encoded_u8);
811
812 {
813 let (_, mut decoder) = evm_coder::abi::AbiReader::new_call(&encoded_enum).unwrap();
814 let restored_enum_data =
815 <Color as evm_coder::abi::AbiRead>::abi_read(&mut decoder).unwrap();
816 assert_eq!(restored_enum_data, Color::Green);
817 }
818 }
819
820 #[test]
821 #[cfg(feature = "stubgen")]
822 fn struct_collect_enum() {
823 assert_eq!(
824 <Color as ::evm_coder::solidity::StructCollect>::name(),
825 "Color"
826 );
827 assert_eq!(
828 <Color as ::evm_coder::solidity::StructCollect>::declaration(),
829 r#"/// @dev Some docs
830/// At multi
831/// line
832enum Color {
833 /// @dev Docs for A
834 /// multi
835 /// line
836 Red,
837 /// @dev Docs for B
838 Green,
839 /// @dev Docs for C
840 Blue
841}
842"#
843 );
844 }
759}845}
760846