Skip to content

Commit 821bc3f

Browse files
committed
Add simple test with cheat
1 parent f7ae062 commit 821bc3f

File tree

4 files changed

+94
-0
lines changed

4 files changed

+94
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[package]
2+
name = "simple_package_with_cheats"
3+
version = "0.1.0"
4+
edition = "2024_07"
5+
6+
[dependencies]
7+
starknet = "2.12.0"
8+
9+
[dev-dependencies]
10+
snforge_std = { path = "../../../../../snforge_std" }
11+
12+
[[target.starknet-contract]]
13+
14+
[tool.snforge]
15+
exit_first = false
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#[starknet::interface]
2+
pub trait IHelloStarknet<TContractState> {
3+
fn increase_balance(ref self: TContractState, amount: felt252);
4+
fn get_balance(self: @TContractState) -> felt252;
5+
fn get_block_number(self: @TContractState) -> u64;
6+
}
7+
8+
#[starknet::contract]
9+
pub mod HelloStarknet {
10+
use core::array::ArrayTrait;
11+
use starknet::get_block_number;
12+
use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess};
13+
14+
#[storage]
15+
struct Storage {
16+
balance: felt252,
17+
}
18+
19+
#[abi(embed_v0)]
20+
impl IHelloStarknetImpl of super::IHelloStarknet<ContractState> {
21+
// Increases the balance by the given amount
22+
fn increase_balance(ref self: ContractState, amount: felt252) {
23+
self.balance.write(self.balance.read() + amount);
24+
}
25+
26+
// Returns the current balance
27+
fn get_balance(self: @ContractState) -> felt252 {
28+
self.balance.read()
29+
}
30+
31+
fn get_block_number(self: @ContractState) -> u64 {
32+
get_block_number()
33+
}
34+
}
35+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use core::array::ArrayTrait;
2+
use core::result::ResultTrait;
3+
use simple_package_with_cheats::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait};
4+
use snforge_std::cheatcodes::contract_class::DeclareResultTrait;
5+
use snforge_std::{ContractClassTrait, declare, start_cheat_block_number_global};
6+
7+
#[test]
8+
fn call_and_invoke() {
9+
let contract = declare("HelloStarknet").unwrap().contract_class();
10+
let constructor_calldata = @ArrayTrait::new();
11+
let (contract_address, _) = contract.deploy(constructor_calldata).unwrap();
12+
let dispatcher = IHelloStarknetDispatcher { contract_address };
13+
14+
let block_number = dispatcher.get_block_number();
15+
println!("block number {}", block_number);
16+
// TODO investigate why the default is 2000
17+
assert(block_number == 2000, 'block_info == 2000');
18+
19+
start_cheat_block_number_global(123);
20+
21+
let block_number = dispatcher.get_block_number();
22+
assert(block_number == 123, 'block_info == 123');
23+
}

crates/forge/tests/e2e/running.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,27 @@ fn simple_package() {
5151
);
5252
}
5353

54+
#[test]
55+
fn simple_package_with_cheats() {
56+
let temp = setup_package("simple_package_with_cheats");
57+
let output = test_runner(&temp).assert().code(0);
58+
59+
assert_stdout_contains(
60+
output,
61+
indoc! {r"
62+
[..]Compiling[..]
63+
[..]Finished[..]
64+
65+
66+
Collected 1 test(s) from simple_package_with_cheats package
67+
Running 0 test(s) from src/
68+
Running 1 test(s) from tests/
69+
[PASS] simple_package_with_cheats_integrationtest::contract::call_and_invoke [..]
70+
"},
71+
);
72+
}
73+
74+
5475
#[test]
5576
fn simple_package_with_git_dependency() {
5677
let temp = setup_package("simple_package");

0 commit comments

Comments
 (0)