use neo_devpack_solidity::runtime::execution::ExecutionContext;
use neo_devpack_solidity::runtime::storage::StorageManager;
use neo_devpack_solidity::runtime::types::StackItem;
use neo_devpack_solidity::runtime::RuntimeConfig;
#[test]
fn storage_find_respects_prefix_and_overlay() {
let mut storage = StorageManager::new(&RuntimeConfig::default()).expect("storage");
let mut ctx = ExecutionContext::new(&RuntimeConfig::default()).expect("ctx");
let account = "0x0000000000000000000000000000000000000000";
storage.set(account, b"aa", b"1").expect("set base storage");
ctx.bind_storage(account, &mut storage).expect("bind");
ctx.initialize(
&[
0x0C, 0x02, b'a', b'a', 0x41, 155, 246, 103, 206, 0x41, 47, 88, 197, 237, 0x0C, 0x01, b'2', 0x0C, 0x02, b'a', b'b', 0x41, 155, 246, 103, 206, 0x41, 230, 63, 24, 132, 0x10, 0x0C, 0x01, b'a', 0x41, 155, 246, 103, 206, 0x41, 223, 48, 184, 154, 0x4A, 0x41, 156, 8, 237, 156, 0x45, 0x41, 243, 84, 191, 29, 0x40, ],
&[],
)
.expect("init");
while !ctx.step().expect("step").halted {}
let result = ctx.return_data();
let entry: StackItem = serde_json::from_slice(result).expect("iterator value json");
let key = match entry {
StackItem::Array(items) => match items.borrow().first() {
Some(StackItem::ByteArray(bytes)) => bytes.borrow().clone(),
_ => Vec::new(),
},
_ => Vec::new(),
};
assert_eq!(key, b"ab");
}