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
--- 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
+}
+"#
+		);
+	}
 }