@@ -132,9 +132,9 @@ impl Events {
132132#[ cfg( any( test, feature = "testutils" ) ) ]
133133#[ cfg_attr( feature = "docs" , doc( cfg( feature = "testutils" ) ) ) ]
134134impl 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