use crate::read;
use std::fs;
use stellar_xdr::{Limits, ScMetaEntry, ScMetaV0, StringM, WriteXdr};
#[test]
fn test_from_wasm() {
let wasm = fs::read("../target/wasm32v1-none/release/test_zero.wasm").unwrap();
let meta = read::from_wasm(&wasm).unwrap();
let keys = meta
.iter()
.map(|e| match e {
ScMetaEntry::ScMetaV0(v0) => v0.key.to_string(),
})
.collect::<Vec<_>>();
assert_eq!(keys, ["rsver", "rssdk_spec_shaking"]);
}
#[test]
fn test_from_wasm_no_metadata() {
let wasm = vec![0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]; let result = read::from_wasm(&wasm).unwrap();
assert_eq!(result.len(), 0);
}
#[test]
fn test_multiple_metadata_sections() {
let mut wasm = fs::read("../target/wasm32v1-none/release/test_zero.wasm").unwrap();
let section_name = b"contractmetav0";
let section_content = ScMetaEntry::ScMetaV0(ScMetaV0 {
key: StringM::try_from("mykey").unwrap(),
val: StringM::try_from("myval").unwrap(),
})
.to_xdr(Limits::none())
.unwrap();
let mut custom_section = Vec::new();
custom_section.push(0); custom_section.push((1 + section_name.len() + section_content.len()) as u8);
custom_section.push(section_name.len() as u8);
custom_section.extend_from_slice(section_name);
custom_section.extend_from_slice(§ion_content);
wasm.extend_from_slice(&custom_section);
let meta = read::from_wasm(&wasm).unwrap();
let keys = meta
.iter()
.map(|e| match e {
ScMetaEntry::ScMetaV0(v0) => v0.key.to_string(),
})
.collect::<Vec<_>>();
assert_eq!(keys, ["rsver", "rssdk_spec_shaking", "mykey"]);
}