// This test file is only compiled for wasm32. The DummySigner uses #[async_trait::async_trait(?Send)] // because WASM async traits do not require Send. See balance.rs or evm_client.rs for the trait bound split rationale. #![cfg(target_arch = "wasm32")] use wasm_bindgen_test::*; wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser); use evm_client::{EvmClient, EvmProvider, Signer, EvmError}; struct DummySigner; #[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() } } #[wasm_bindgen_test(async)] async fn test_get_balance_vitalik_browser() { let provider = EvmProvider::Http { name: "mainnet".to_string(), url: "https://eth.drpc.org".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 balance = client.get_balance("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045").await; assert!(balance.is_ok(), "Balance query should succeed in browser"); let balance = balance.unwrap(); assert!(balance > 0u128, "Vitalik's balance should be greater than zero"); } #[wasm_bindgen_test(async)] async fn test_transfer_rlp_encoding_browser() { let provider = EvmProvider::Http { name: "mainnet".to_string(), url: "https://eth.drpc.org".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("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", 1u128).await; assert!(matches!(result, Err(EvmError::Rpc(_)) | Err(EvmError::Vault(_)))); }