@@ -198,32 +198,84 @@ unconstrained fn private_context_repeats_contract_address() {
198198 assert_eq (first_address , second_address );
199199}
200200
201+ // utility_context currently uses the _next_ block number, not the last one. This is because we actually have a single
202+ // oracle for the block number, which has a meaning that depends on the current context. Once all three contexts are
203+ // implemented as actual separate handlers we'll be able to make this test pass.
204+ // #[test]
205+ // unconstrained fn utility_context_uses_last_block_number() {
206+ // let mut env = TestEnvironment::_new();
207+
208+ // let last_block_number = env.last_block_number();
209+
210+ // env.utility_context(|context| {
211+ // assert_eq(last_block_number, context.block_number());
212+ // });
213+ // }
214+
215+ #[test]
216+ unconstrained fn utility_context_does_not_advance_block_number () {
217+ let mut env = TestEnvironment ::_new ();
218+
219+ let first_block_number = env .utility_context (|context | context .block_number ());
220+ let second_block_number = env .utility_context (|context | context .block_number ());
221+
222+ assert_eq (second_block_number , first_block_number );
223+ }
224+
225+ #[test]
226+ unconstrained fn utility_context_does_not_advance_the_timestamp () {
227+ let mut env = TestEnvironment ::_new ();
228+
229+ env .utility_context (|_ | {});
230+ let first_timestamp = env .last_block_timestamp ();
231+ env .utility_context (|_ | {});
232+ let second_timestamp = env .last_block_timestamp ();
233+
234+ assert_eq (second_timestamp , first_timestamp );
235+ }
236+
237+ #[test]
238+ unconstrained fn utility_context_repeats_contract_address () {
239+ let mut env = TestEnvironment ::new ();
240+
241+ let first_address = env .utility_context (|context | context .this_address ());
242+ let second_address = env .utility_context (|context | context .this_address ());
243+
244+ assert_eq (first_address , second_address );
245+ }
246+
201247#[test]
202- unconstrained fn private_and_public_context_share_contract_address () {
248+ unconstrained fn private_public_and_utility_context_share_default_contract_address () {
203249 let mut env = TestEnvironment ::new ();
204250
205251 let private_address = env .private_context (|context | context .this_address ());
206252 let public_address = env .public_context (|context | context .this_address ());
253+ let utility_address = env .utility_context (|context | context .this_address ());
207254
208255 assert_eq (private_address , public_address );
256+ assert_eq (private_address , utility_address );
209257}
210258
211259#[test]
212- unconstrained fn private_and_public_context_share_version () {
260+ unconstrained fn private_public_and_utility_context_share_default_version () {
213261 let mut env = TestEnvironment ::new ();
214262
215263 let private_version = env .private_context (|context | context .version ());
216264 let public_version = env .public_context (|context | context .version ());
265+ let utility_version = env .utility_context (|context | context .version ());
217266
218267 assert_eq (private_version , public_version );
268+ assert_eq (private_version , utility_version );
219269}
220270
221271#[test]
222- unconstrained fn private_and_public_context_share_chain_id () {
272+ unconstrained fn private_public_and_utility_context_share_default_chain_id () {
223273 let mut env = TestEnvironment ::new ();
224274
225275 let private_chain_id = env .private_context (|context | context .chain_id ());
226276 let public_chain_id = env .public_context (|context | context .chain_id ());
277+ let utility_chain_id = env .utility_context (|context | context .chain_id ());
227278
228279 assert_eq (private_chain_id , public_chain_id );
280+ assert_eq (private_chain_id , utility_chain_id );
229281}
0 commit comments