1mod contract_instance;
5mod core;
6pub mod queriers;
7mod state;
8
9pub use self::core::CloneTesting;
10pub use clone_cw_multi_test as cw_multi_test;
11pub use contract_instance::WasmUpload;
12pub use state::MockState;
13
14mod contract {
16 use clone_cw_multi_test::wasm_emulation::storage::storage_wrappers::{
17 ReadonlyStorageWrapper, StorageWrapper,
18 };
19 use clone_cw_multi_test::{
20 wasm_emulation::{
21 query::{mock_querier::ForkState, MockQuerier},
22 storage::dual_std_storage::DualStorage,
23 },
24 Contract,
25 };
26 use cosmwasm_std::{Checksum, Deps, DepsMut, Empty, QuerierWrapper};
27
28 pub struct CloneTestingContract(Box<dyn cw_orch_mock::cw_multi_test::Contract<Empty, Empty>>);
29
30 impl CloneTestingContract {
31 pub fn new(contract: Box<dyn cw_orch_mock::cw_multi_test::Contract<Empty, Empty>>) -> Self {
32 Self(contract)
33 }
34 }
35
36 impl Contract<Empty, Empty> for CloneTestingContract {
37 fn execute(
38 &self,
39 deps: cosmwasm_std::DepsMut<cosmwasm_std::Empty>,
40 env: cosmwasm_std::Env,
41 info: cosmwasm_std::MessageInfo,
42 msg: Vec<u8>,
43 fork_state: ForkState<Empty, Empty>,
44 ) -> anyhow::Result<cosmwasm_std::Response> {
45 let querier = MockQuerier::new(fork_state.clone());
46 let mut storage = DualStorage::new(
47 fork_state.remote,
48 env.contract.address.to_string(),
49 Box::new(StorageWrapper::new(deps.storage)),
50 )?;
51 let deps = DepsMut {
52 storage: &mut storage,
53 api: deps.api,
54 querier: QuerierWrapper::new(&querier),
55 };
56 self.0.execute(deps, env, info, msg)
57 }
58
59 fn instantiate(
60 &self,
61 deps: cosmwasm_std::DepsMut<cosmwasm_std::Empty>,
62 env: cosmwasm_std::Env,
63 info: cosmwasm_std::MessageInfo,
64 msg: Vec<u8>,
65 fork_state: ForkState<Empty, Empty>,
66 ) -> anyhow::Result<cosmwasm_std::Response> {
67 let querier = MockQuerier::new(fork_state.clone());
68 let mut storage = DualStorage::new(
69 fork_state.remote,
70 env.contract.address.to_string(),
71 Box::new(StorageWrapper::new(deps.storage)),
72 )?;
73 let deps = DepsMut {
74 storage: &mut storage,
75 api: deps.api,
76 querier: QuerierWrapper::new(&querier),
77 };
78 self.0.instantiate(deps, env, info, msg)
79 }
80
81 fn query(
82 &self,
83 deps: cosmwasm_std::Deps<cosmwasm_std::Empty>,
84 env: cosmwasm_std::Env,
85 msg: Vec<u8>,
86 fork_state: ForkState<Empty, Empty>,
87 ) -> anyhow::Result<cosmwasm_std::Binary> {
88 let querier = MockQuerier::new(fork_state.clone());
89 let storage = DualStorage::new(
90 fork_state.remote,
91 env.contract.address.to_string(),
92 Box::new(ReadonlyStorageWrapper::new(deps.storage)),
93 )?;
94 let deps = Deps {
95 storage: &storage,
96 api: deps.api,
97 querier: QuerierWrapper::new(&querier),
98 };
99 self.0.query(deps, env, msg)
100 }
101
102 fn sudo(
103 &self,
104 deps: cosmwasm_std::DepsMut<cosmwasm_std::Empty>,
105 env: cosmwasm_std::Env,
106 msg: Vec<u8>,
107 fork_state: ForkState<Empty, Empty>,
108 ) -> anyhow::Result<cosmwasm_std::Response> {
109 let querier = MockQuerier::new(fork_state.clone());
110 let mut storage = DualStorage::new(
111 fork_state.remote,
112 env.contract.address.to_string(),
113 Box::new(StorageWrapper::new(deps.storage)),
114 )?;
115 let deps = DepsMut {
116 storage: &mut storage,
117 api: deps.api,
118 querier: QuerierWrapper::new(&querier),
119 };
120 self.0.sudo(deps, env, msg)
121 }
122
123 fn reply(
124 &self,
125 deps: cosmwasm_std::DepsMut<cosmwasm_std::Empty>,
126 env: cosmwasm_std::Env,
127 msg: cosmwasm_std::Reply,
128 fork_state: ForkState<Empty, Empty>,
129 ) -> anyhow::Result<cosmwasm_std::Response> {
130 let querier = MockQuerier::new(fork_state.clone());
131 let mut storage = DualStorage::new(
132 fork_state.remote,
133 env.contract.address.to_string(),
134 Box::new(StorageWrapper::new(deps.storage)),
135 )?;
136 let deps = DepsMut {
137 storage: &mut storage,
138 api: deps.api,
139 querier: QuerierWrapper::new(&querier),
140 };
141 self.0.reply(deps, env, msg)
142 }
143
144 fn migrate(
145 &self,
146 deps: cosmwasm_std::DepsMut<cosmwasm_std::Empty>,
147 env: cosmwasm_std::Env,
148 msg: Vec<u8>,
149 fork_state: ForkState<Empty, Empty>,
150 ) -> anyhow::Result<cosmwasm_std::Response> {
151 let querier = MockQuerier::new(fork_state.clone());
152 let mut storage = DualStorage::new(
153 fork_state.remote,
154 env.contract.address.to_string(),
155 Box::new(StorageWrapper::new(deps.storage)),
156 )?;
157 let deps = DepsMut {
158 storage: &mut storage,
159 api: deps.api,
160 querier: QuerierWrapper::new(&querier),
161 };
162 self.0.migrate(deps, env, msg)
163 }
164
165 fn checksum(&self) -> Option<Checksum> {
167 self.0.checksum()
168 }
169 }
170}