Skip to content

Commit ba841fc

Browse files
committed
chore: keep backwards compatability and add tests
1 parent 9e0492d commit ba841fc

File tree

13 files changed

+1479
-425
lines changed

13 files changed

+1479
-425
lines changed

soroban-sdk/src/events.rs

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,9 @@ impl Events {
132132
#[cfg(any(test, feature = "testutils"))]
133133
#[cfg_attr(feature = "docs", doc(cfg(feature = "testutils")))]
134134
impl testutils::Events for Events {
135-
fn all(&self) -> std::vec::Vec<testutils::ContractEvent> {
135+
fn all(&self) -> Vec<(crate::Address, Vec<Val>, Val)> {
136136
let env = self.env();
137-
let mut vec = std::vec::Vec::new();
137+
let mut vec = Vec::new(&env);
138138
self.env()
139139
.host()
140140
.get_events()
@@ -152,8 +152,7 @@ impl testutils::Events for Events {
152152
..
153153
} = e.event
154154
{
155-
vec.push(testutils::ContractEvent::new(
156-
&env,
155+
vec.push_back((
157156
Address::from_contract_id(env, contract_id.0 .0),
158157
topics.try_into_val(env).unwrap(),
159158
data.try_into_val(env).unwrap(),
@@ -162,4 +161,45 @@ impl testutils::Events for Events {
162161
});
163162
vec
164163
}
164+
165+
fn contract_events(&self) -> std::vec::Vec<testutils::ContractEvent> {
166+
let env = self.env();
167+
self.env()
168+
.host()
169+
.get_events()
170+
.unwrap()
171+
.0
172+
.into_iter()
173+
.filter_map(|e| {
174+
if e.failed_call {
175+
None
176+
} else if let xdr::ContractEvent {
177+
type_: xdr::ContractEventType::Contract,
178+
contract_id: Some(contract_id),
179+
body: xdr::ContractEventBody::V0(xdr::ContractEventV0 { topics, data }),
180+
..
181+
} = e.event
182+
{
183+
Some(testutils::ContractEvent::new(
184+
&env,
185+
Address::from_contract_id(env, contract_id.0 .0),
186+
topics.try_into_val(env).unwrap(),
187+
data.try_into_val(env).unwrap(),
188+
))
189+
} else {
190+
None
191+
}
192+
})
193+
.collect()
194+
}
195+
196+
fn contract_events_for(
197+
&self,
198+
contract_id: &crate::Address,
199+
) -> std::vec::Vec<testutils::ContractEvent> {
200+
self.contract_events()
201+
.into_iter()
202+
.filter(|e| &e.contract_id == contract_id)
203+
.collect()
204+
}
165205
}

0 commit comments

Comments
 (0)