#![cfg(not(target_arch = "wasm32"))] // tests/evm_client.rs use evm_client::{EvmClient, EvmProvider, Signer, EvmError}; struct DummySigner; #[cfg(target_arch = "wasm32")] #[async_trait::async_trait(?Send)] impl Signer for DummySigner { async fn sign(&self, _message: &[u8]) -> Result, EvmError> { Ok(vec![0u8; 65]) // dummy signature } fn address(&self) -> String { "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045".to_string() } } #[cfg(not(target_arch = "wasm32"))] #[async_trait::async_trait] impl Signer for DummySigner { async fn sign(&self, _message: &[u8]) -> Result, EvmError> { Ok(vec![0u8; 65]) // dummy signature } fn address(&self) -> String { "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045".to_string() } } #[tokio::test] async fn test_transfer_rlp_encoding() { let provider = EvmProvider::Http { name: "mainnet".to_string(), url: "https://rpc.ankr.com/eth".to_string(), chain_id: 1, }; let signer = DummySigner; let mut client = EvmClient::new(signer); client.add_provider("mainnet".to_string(), provider); client.set_current("mainnet").unwrap(); // Use a dummy transfer (will fail to send, but will test RLP logic) let result = client.transfer("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", 1u128).await; // Should fail due to dummy signature, but should not panic or error at RLP encoding assert!(matches!(result, Err(EvmError::Rpc(_)) | Err(EvmError::Vault(_)))); } #[tokio::test] async fn test_transfer_invalid_address() { let provider = EvmProvider::Http { name: "mainnet".to_string(), url: "https://rpc.ankr.com/eth".to_string(), chain_id: 1, }; let signer = DummySigner; let mut client = EvmClient::new(signer); client.add_provider("mainnet".to_string(), provider); client.set_current("mainnet").unwrap(); let result = client.transfer("invalid_address", 1u128).await; assert!(matches!(result, Err(EvmError::Rpc(_)))); }