diff --git a/bridges/primitives/test-utils/Cargo.toml b/bridges/primitives/test-utils/Cargo.toml index 0a591334577af3d7fa91dacd4817450f5fedb460..2bc77e632e5f1ec8423c2ac1c3987e5f4c6add10 100644 --- a/bridges/primitives/test-utils/Cargo.toml +++ b/bridges/primitives/test-utils/Cargo.toml @@ -15,6 +15,9 @@ sp-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +[dev-dependencies] +xcm = { git = "https://github.com/paritytech/polkadot", branch = "master", default-features = false } + [features] default = ["std"] std = [ diff --git a/bridges/primitives/test-utils/src/lib.rs b/bridges/primitives/test-utils/src/lib.rs index c1e95ec6fefdc769306d8891b6dfc96b0e62ec04..186d192014bb05dc3a0775ff9e2ee9bf9f470064 100644 --- a/bridges/primitives/test-utils/src/lib.rs +++ b/bridges/primitives/test-utils/src/lib.rs @@ -299,3 +299,47 @@ macro_rules! generate_owned_bridge_module_tests { } }; } + +#[cfg(test)] +mod tests { + use codec::Encode; + use sp_application_crypto::sp_core::{hexdisplay, hexdisplay::HexDisplay}; + use xcm::VersionedXcm; + + fn print_xcm<RuntimeCall>(xcm: &VersionedXcm<RuntimeCall>) { + println!("-----------------"); + println!("xcm (plain): {:?}", xcm); + println!("xcm (bytes): {:?}", xcm.encode()); + println!("xcm (hex): {:?}", hexdisplay::HexDisplay::from(&xcm.encode())); + } + + fn as_hex<RuntimeCall>(xcm: &VersionedXcm<RuntimeCall>) -> String { + HexDisplay::from(&xcm.encode()).to_string() + } + + pub type RuntimeCall = (); + + #[test] + fn generate_versioned_xcm_message_hex_bytes() { + let xcm: xcm::v2::Xcm<RuntimeCall> = xcm::v2::Xcm(vec![xcm::v2::Instruction::Trap(43)]); + let xcm: VersionedXcm<RuntimeCall> = From::from(xcm); + print_xcm(&xcm); + assert_eq!("020419ac", format!("{}", as_hex(&xcm))); + + let xcm: xcm::v3::Xcm<RuntimeCall> = vec![xcm::v3::Instruction::Trap(43)].into(); + let xcm: VersionedXcm<RuntimeCall> = From::from(xcm); + print_xcm(&xcm); + assert_eq!("030419ac", format!("{}", as_hex(&xcm))); + + let xcm: xcm::v3::Xcm<RuntimeCall> = vec![ + xcm::v3::Instruction::ClearError, + xcm::v3::Instruction::ClearTopic, + xcm::v3::Instruction::ClearTransactStatus, + xcm::v3::Instruction::Trap(43), + ] + .into(); + let xcm: VersionedXcm<RuntimeCall> = From::from(xcm); + print_xcm(&xcm); + assert_eq!("0310172c2319ac", format!("{}", as_hex(&xcm))); + } +}