Skip to content

Commit b9eb261

Browse files
authored
✨ decoded_logs field added to TestResult structs (#3543)
1 parent 2669696 commit b9eb261

File tree

5 files changed

+17
-6
lines changed

5 files changed

+17
-6
lines changed

evm/src/fuzz/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
coverage::HitMaps,
3-
decode,
3+
decode::{self, decode_console_logs},
44
executor::{Executor, RawCallResult},
55
trace::CallTraceArena,
66
};
@@ -173,6 +173,7 @@ impl<'a> FuzzedExecutor<'a> {
173173
success: run_result.is_ok(),
174174
reason: None,
175175
counterexample: None,
176+
decoded_logs: decode_console_logs(&call.logs),
176177
logs: call.logs,
177178
labeled_addresses: call.labels,
178179
traces: if run_result.is_ok() { traces.into_inner() } else { call.traces.clone() },
@@ -322,6 +323,9 @@ pub struct FuzzTestResult {
322323
/// be printed to the user.
323324
pub logs: Vec<Log>,
324325

326+
/// The decoded DSTest logging events and Hardhat's `console.log` from [logs](Self::logs).
327+
pub decoded_logs: Vec<String>,
328+
325329
/// Labeled addresses
326330
pub labeled_addresses: BTreeMap<Address, String>,
327331

forge/src/result.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ pub struct TestResult {
7575
/// be printed to the user.
7676
pub logs: Vec<Log>,
7777

78+
/// The decoded DSTest logging events and Hardhat's `console.log` from [logs](Self::logs).
79+
pub decoded_logs: Vec<String>,
80+
7881
/// What kind of test this was
7982
pub kind: TestKind,
8083

forge/src/runner.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use foundry_common::{
1212
TestFunctionExt,
1313
};
1414
use foundry_evm::{
15+
decode::decode_console_logs,
1516
executor::{CallResult, DeployResult, EvmError, Executor},
1617
fuzz::{
1718
invariant::{
@@ -216,6 +217,7 @@ impl<'a> ContractRunner<'a> {
216217
reason: Some("Multiple setUp functions".to_string()),
217218
counterexample: None,
218219
logs: vec![],
220+
decoded_logs: vec![],
219221
kind: TestKind::Standard(0),
220222
traces: vec![],
221223
coverage: None,
@@ -249,6 +251,7 @@ impl<'a> ContractRunner<'a> {
249251
success: false,
250252
reason: setup.reason,
251253
counterexample: None,
254+
decoded_logs: decode_console_logs(&setup.logs),
252255
logs: setup.logs,
253256
kind: TestKind::Standard(0),
254257
traces: setup.traces,
@@ -417,6 +420,7 @@ impl<'a> ContractRunner<'a> {
417420
success,
418421
reason,
419422
counterexample: None,
423+
decoded_logs: decode_console_logs(&logs),
420424
logs,
421425
kind: TestKind::Standard(gas.overflowing_sub(stipend).0),
422426
traces,
@@ -495,6 +499,7 @@ impl<'a> ContractRunner<'a> {
495499
(!err.revert_reason.is_empty()).then(|| err.revert_reason.clone())
496500
}),
497501
counterexample,
502+
decoded_logs: decode_console_logs(&logs),
498503
logs,
499504
kind: TestKind::Invariant(cases.clone(), reverts),
500505
coverage: None, // todo?
@@ -543,6 +548,7 @@ impl<'a> ContractRunner<'a> {
543548
success: result.success,
544549
reason: result.reason,
545550
counterexample: result.counterexample,
551+
decoded_logs: decode_console_logs(&logs),
546552
logs,
547553
kind: TestKind::Fuzz(result.cases),
548554
traces,

forge/tests/it/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ pub fn assert_multiple(
216216
contract_name
217217
);
218218
for (test_name, should_pass, reason, expected_logs, expected_warning_count) in tests {
219-
let logs = decode_console_logs(&actuals[*contract_name].test_results[*test_name].logs);
219+
let logs = &actuals[*contract_name].test_results[*test_name].decoded_logs;
220220

221221
let warnings_count = &actuals[*contract_name].warnings.len();
222222

forge/tests/it/fuzz.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
use crate::{config::*, test_helpers::filter::Filter};
44
use ethers::types::U256;
55
use forge::result::SuiteResult;
6-
use foundry_evm::decode::decode_console_logs;
76
use std::collections::BTreeMap;
87

98
#[test]
@@ -24,7 +23,6 @@ fn test_fuzz() {
2423

2524
for (_, SuiteResult { test_results, .. }) in suite_result {
2625
for (test_name, result) in test_results {
27-
let logs = decode_console_logs(&result.logs);
2826
match test_name.as_str() {
2927
"testPositive(uint256)" |
3028
"testPositive(int256)" |
@@ -34,14 +32,14 @@ fn test_fuzz() {
3432
"Test {} did not pass as expected.\nReason: {:?}\nLogs:\n{}",
3533
test_name,
3634
result.reason,
37-
logs.join("\n")
35+
result.decoded_logs.join("\n")
3836
),
3937
_ => assert!(
4038
!result.success,
4139
"Test {} did not fail as expected.\nReason: {:?}\nLogs:\n{}",
4240
test_name,
4341
result.reason,
44-
logs.join("\n")
42+
result.decoded_logs.join("\n")
4543
),
4644
}
4745
}

0 commit comments

Comments
 (0)