Skip to content

Commit d72db7f

Browse files
committed
Add tests for library call
1 parent 95d6326 commit d72db7f

File tree

3 files changed

+37
-4
lines changed

3 files changed

+37
-4
lines changed

crates/forge/tests/data/simple_package_with_cheats/src/lib.cairo

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,17 @@ pub trait IHelloStarknet<TContractState> {
88
#[starknet::interface]
99
pub trait IHelloStarknetProxy<TContractState> {
1010
fn get_block_number(self: @TContractState) -> u64;
11+
fn get_block_number_library_call(self: @TContractState) -> u64;
1112
}
1213

1314
#[starknet::contract]
1415
pub mod HelloStarknetProxy {
1516
use starknet::ContractAddress;
1617
use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess};
17-
use crate::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait};
18+
use starknet::syscalls::get_class_hash_at_syscall;
19+
use crate::{
20+
IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, IHelloStarknetLibraryDispatcher,
21+
};
1822

1923
#[storage]
2024
struct Storage {
@@ -33,6 +37,13 @@ pub mod HelloStarknetProxy {
3337
let proxied = IHelloStarknetDispatcher { contract_address: address };
3438
proxied.get_block_number()
3539
}
40+
41+
fn get_block_number_library_call(self: @ContractState) -> u64 {
42+
let address = self.address.read();
43+
let class_hash = get_class_hash_at_syscall(address).unwrap();
44+
let library_dispatcher = IHelloStarknetLibraryDispatcher { class_hash };
45+
library_dispatcher.get_block_number()
46+
}
3647
}
3748
}
3849

crates/forge/tests/data/simple_package_with_cheats/tests/contract.cairo

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,24 @@ fn call_and_invoke_proxy() {
4646
let block_number = dispatcher.get_block_number();
4747
assert(block_number == 123, 'block_number == 123');
4848
}
49+
50+
#[test]
51+
fn call_and_invoke_library_call() {
52+
let contract = declare("HelloStarknet").unwrap().contract_class();
53+
let constructor_calldata = @ArrayTrait::new();
54+
let (contract_address, _) = contract.deploy(constructor_calldata).unwrap();
55+
56+
let proxy_contract = declare("HelloStarknetProxy").unwrap().contract_class();
57+
let mut constructor_calldata = ArrayTrait::new();
58+
contract_address.serialize(ref constructor_calldata);
59+
let (proxy_contract_address, _) = proxy_contract.deploy(@constructor_calldata).unwrap();
60+
let dispatcher = IHelloStarknetProxyDispatcher { contract_address: proxy_contract_address };
61+
62+
let block_number = dispatcher.get_block_number_library_call();
63+
assert(block_number == 2000, 'block_number == 2000');
64+
65+
start_cheat_block_number_global(123);
66+
67+
let block_number = dispatcher.get_block_number_library_call();
68+
assert(block_number == 123, 'block_number == 123');
69+
}

crates/forge/tests/e2e/running.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,13 @@ fn simple_package_with_cheats() {
6363
[..]Finished[..]
6464
6565
66-
Collected 2 test(s) from simple_package_with_cheats package
66+
Collected 3 test(s) from simple_package_with_cheats package
6767
Running 0 test(s) from src/
68-
Running 2 test(s) from tests/
68+
Running 3 test(s) from tests/
6969
[PASS] simple_package_with_cheats_integrationtest::contract::call_and_invoke [..]
7070
[PASS] simple_package_with_cheats_integrationtest::contract::call_and_invoke_proxy [..]
71-
Tests: 2 passed, 0 failed, 0 ignored, 0 filtered out
71+
[PASS] simple_package_with_cheats_integrationtest::contract::call_and_invoke_library_call [..]
72+
Tests: 3 passed, 0 failed, 0 ignored, 0 filtered out
7273
"},
7374
);
7475
}

0 commit comments

Comments
 (0)