Skip to content

Commit 250303e

Browse files
authored
test: make forgetest_init! init an empty project (#12335)
* wip * empty * Revert "empty" This reverts commit d96dac1. * more * a
1 parent b54c18a commit 250303e

File tree

32 files changed

+185
-220
lines changed

32 files changed

+185
-220
lines changed

crates/cast/tests/cli/main.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2765,6 +2765,7 @@ forgetest_async!(show_state_changes_in_traces, |prj, cmd| {
27652765
let (api, handle) = anvil::spawn(NodeConfig::test()).await;
27662766

27672767
foundry_test_utils::util::initialize(prj.root());
2768+
prj.initialize_default_contracts();
27682769
// Deploy counter contract.
27692770
cmd.args([
27702771
"script",
@@ -2933,6 +2934,7 @@ forgetest_async!(cast_call_disable_labels, |prj, cmd| {
29332934
let (_, handle) = anvil::spawn(NodeConfig::test()).await;
29342935

29352936
foundry_test_utils::util::initialize(prj.root());
2937+
prj.initialize_default_contracts();
29362938
prj.add_source(
29372939
"Counter",
29382940
r#"
@@ -3034,6 +3036,7 @@ forgetest_async!(cast_call_custom_override, |prj, cmd| {
30343036
let (_, handle) = anvil::spawn(NodeConfig::test()).await;
30353037

30363038
foundry_test_utils::util::initialize(prj.root());
3039+
prj.initialize_default_contracts();
30373040
prj.add_source(
30383041
"Counter",
30393042
r#"

crates/cheatcodes/src/json.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -801,14 +801,15 @@ mod tests {
801801
use proptest::{arbitrary::any, prop_oneof, strategy::Strategy};
802802
use std::collections::HashSet;
803803

804-
fn contains_tuple(value: &DynSolValue) -> bool {
805-
match value {
806-
DynSolValue::Tuple(_) | DynSolValue::CustomStruct { .. } => true,
807-
DynSolValue::Array(v) | DynSolValue::FixedArray(v) => {
808-
v.first().is_some_and(contains_tuple)
809-
}
810-
_ => false,
811-
}
804+
fn valid_value(value: &DynSolValue) -> bool {
805+
(match value {
806+
DynSolValue::String(s) if s == "{}" => false,
807+
808+
DynSolValue::Tuple(_) | DynSolValue::CustomStruct { .. } => false,
809+
810+
DynSolValue::Array(v) | DynSolValue::FixedArray(v) => v.iter().all(valid_value),
811+
_ => true,
812+
}) && value.as_type().is_some()
812813
}
813814

814815
/// [DynSolValue::Bytes] of length 32 and 20 are converted to [DynSolValue::FixedBytes] and
@@ -836,10 +837,7 @@ mod tests {
836837
}
837838

838839
fn guessable_types() -> impl proptest::strategy::Strategy<Value = DynSolValue> {
839-
any::<DynSolValue>()
840-
.prop_map(fixup_guessable)
841-
.prop_filter("tuples are not supported", |v| !contains_tuple(v))
842-
.prop_filter("filter out values without type", |v| v.as_type().is_some())
840+
any::<DynSolValue>().prop_map(fixup_guessable).prop_filter("invalid value", valid_value)
843841
}
844842

845843
/// A proptest strategy for generating a (simple) `DynSolValue::CustomStruct`

crates/chisel/tests/it/repl/session.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ impl ChiselSession {
2525
let project = foundry_test_utils::TestProject::new(name, PathStyle::Dapptools);
2626
if init {
2727
foundry_test_utils::util::initialize(project.root());
28+
project.initialize_default_contracts();
2829
}
2930

3031
let bin = env!("CARGO_BIN_EXE_chisel");

crates/forge/tests/cli/bind.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// <https://github.com/foundry-rs/foundry/issues/9482>
2-
forgetest_init!(bind_unlinked_bytecode, |prj, cmd| {
3-
prj.wipe();
2+
forgetest!(bind_unlinked_bytecode, |prj, cmd| {
43
prj.add_source(
54
"SomeLibContract.sol",
65
r#"

crates/forge/tests/cli/build.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use foundry_test_utils::{forgetest, snapbox::IntoData, str};
33
use globset::Glob;
44

55
forgetest_init!(can_parse_build_filters, |prj, cmd| {
6+
prj.initialize_default_contracts();
67
prj.clear();
78

89
cmd.args(["build", "--names", "--skip", "tests", "scripts"]).assert_success().stdout_eq(str![
@@ -158,6 +159,7 @@ No files changed, compilation skipped
158159

159160
// tests build output is as expected
160161
forgetest_init!(exact_build_output, |prj, cmd| {
162+
prj.initialize_default_contracts();
161163
cmd.args(["build", "--force"]).assert_success().stdout_eq(str![[r#"
162164
[COMPILING_FILES] with [SOLC_VERSION]
163165
[SOLC_VERSION] [ELAPSED]
@@ -168,6 +170,7 @@ Compiler run successful!
168170

169171
// tests build output is as expected
170172
forgetest_init!(build_sizes_no_forge_std, |prj, cmd| {
173+
prj.initialize_default_contracts();
171174
prj.update_config(|config| {
172175
config.solc = Some(foundry_config::SolcReq::Version(semver::Version::new(0, 8, 27)));
173176
});
@@ -211,6 +214,7 @@ forgetest_init!(build_sizes_no_forge_std, |prj, cmd| {
211214

212215
// tests build output --sizes handles multiple contracts with the same name
213216
forgetest_init!(build_sizes_multiple_contracts, |prj, cmd| {
217+
prj.initialize_default_contracts();
214218
prj.add_source(
215219
"Foo",
216220
r"
@@ -277,6 +281,7 @@ contract Counter {
277281

278282
// tests build output --sizes --json handles multiple contracts with the same name
279283
forgetest_init!(build_sizes_multiple_contracts_json, |prj, cmd| {
284+
prj.initialize_default_contracts();
280285
prj.add_source(
281286
"Foo",
282287
r"

crates/forge/tests/cli/cache.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ forgetest!(can_list_specific_chain, |_prj, cmd| {
1616
});
1717

1818
forgetest_init!(can_test_no_cache, |prj, cmd| {
19+
prj.initialize_default_contracts();
1920
prj.clear_cache();
2021

2122
cmd.args(["test", "--no-cache"]).assert_success();

crates/forge/tests/cli/cmd.rs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ forgetest!(can_clean_non_existing, |prj, cmd| {
8888

8989
// checks that `clean` doesn't output warnings
9090
forgetest_init!(can_clean_without_warnings, |prj, cmd| {
91-
prj.wipe_contracts();
9291
prj.add_source(
9392
"Simple.sol",
9493
r#"
@@ -922,6 +921,7 @@ forgetest!(can_clean_hardhat, PathStyle::HardHat, |prj, cmd| {
922921

923922
// checks that `clean` also works with the "out" value set in Config
924923
forgetest_init!(can_clean_config, |prj, cmd| {
924+
prj.initialize_default_contracts();
925925
prj.update_config(|config| config.out = "custom-out".into());
926926
cmd.arg("build").assert_success().stdout_eq(str![[r#"
927927
[COMPILING_FILES] with [SOLC_VERSION]
@@ -940,6 +940,7 @@ Compiler run successful!
940940

941941
// checks that `clean` removes fuzz and invariant cache dirs
942942
forgetest_init!(can_clean_test_cache, |prj, cmd| {
943+
prj.initialize_default_contracts();
943944
prj.update_config(|config| {
944945
config.fuzz = FuzzConfig::new("cache/fuzz".into());
945946
config.invariant = InvariantConfig::new("cache/invariant".into());
@@ -960,6 +961,7 @@ forgetest_init!(can_clean_test_cache, |prj, cmd| {
960961

961962
// checks that extra output works
962963
forgetest_init!(can_emit_extra_output, |prj, cmd| {
964+
prj.initialize_default_contracts();
963965
prj.clear();
964966

965967
cmd.args(["build", "--extra-output", "metadata"]).assert_success().stdout_eq(str![[r#"
@@ -992,6 +994,7 @@ Compiler run successful!
992994

993995
// checks that extra output works
994996
forgetest_init!(can_emit_multiple_extra_output, |prj, cmd| {
997+
prj.initialize_default_contracts();
995998
cmd.args([
996999
"build",
9971000
"--extra-output",
@@ -2544,6 +2547,7 @@ Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests)
25442547

25452548
// <https://github.com/foundry-rs/foundry/issues/9115>
25462549
forgetest_init!(gas_report_with_fallback, |prj, cmd| {
2550+
prj.initialize_default_contracts();
25472551
prj.add_test(
25482552
"DelegateProxyTest.sol",
25492553
r#"
@@ -2686,6 +2690,7 @@ Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests)
26862690

26872691
// <https://github.com/foundry-rs/foundry/issues/9858>
26882692
forgetest_init!(gas_report_fallback_with_calldata, |prj, cmd| {
2693+
prj.initialize_default_contracts();
26892694
prj.add_test(
26902695
"FallbackWithCalldataTest.sol",
26912696
r#"
@@ -2784,6 +2789,7 @@ Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests)
27842789

27852790
// <https://github.com/foundry-rs/foundry/issues/9300>
27862791
forgetest_init!(gas_report_size_for_nested_create, |prj, cmd| {
2792+
prj.initialize_default_contracts();
27872793
prj.add_test(
27882794
"NestedDeployTest.sol",
27892795
r#"
@@ -2927,6 +2933,7 @@ Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests)
29272933
});
29282934

29292935
forgetest_init!(can_use_absolute_imports, |prj, cmd| {
2936+
prj.initialize_default_contracts();
29302937
prj.update_config(|config| {
29312938
let remapping = prj.paths().libraries[0].join("myDependency");
29322939
config.remappings = vec![
@@ -2972,6 +2979,7 @@ Compiler run successful!
29722979

29732980
// <https://github.com/foundry-rs/foundry/issues/3440>
29742981
forgetest_init!(can_use_absolute_imports_from_test_and_script, |prj, cmd| {
2982+
prj.initialize_default_contracts();
29752983
prj.add_script(
29762984
"IMyScript.sol",
29772985
r"
@@ -3013,7 +3021,8 @@ Compiler run successful!
30133021
});
30143022

30153023
// checks `forge inspect <contract> irOptimized works
3016-
forgetest_init!(can_inspect_ir_optimized, |_prj, cmd| {
3024+
forgetest_init!(can_inspect_ir_optimized, |prj, cmd| {
3025+
prj.initialize_default_contracts();
30173026
cmd.args(["inspect", TEMPLATE_CONTRACT, "irOptimized"]);
30183027
cmd.assert_success().stdout_eq(str![[r#"
30193028
/// @use-src 0:"src/Counter.sol"
@@ -3038,7 +3047,8 @@ object "Counter_21" {
30383047
});
30393048

30403049
// checks `forge inspect <contract> irOptimized works
3041-
forgetest_init!(can_inspect_ir, |_prj, cmd| {
3050+
forgetest_init!(can_inspect_ir, |prj, cmd| {
3051+
prj.initialize_default_contracts();
30423052
cmd.args(["inspect", TEMPLATE_CONTRACT, "ir"]);
30433053
cmd.assert_success().stdout_eq(str![[r#"
30443054
@@ -3064,6 +3074,7 @@ object "Counter_21" {
30643074

30653075
// checks forge bind works correctly on the default project
30663076
forgetest_init!(can_bind, |prj, cmd| {
3077+
prj.initialize_default_contracts();
30673078
prj.clear();
30683079

30693080
cmd.arg("bind").assert_success().stdout_eq(str![[r#"
@@ -3078,6 +3089,7 @@ Bindings have been generated to [..]
30783089

30793090
// checks that extra output works
30803091
forgetest_init!(can_build_skip_contracts, |prj, cmd| {
3092+
prj.initialize_default_contracts();
30813093
prj.clear();
30823094

30833095
// Only builds the single template contract `src/*`
@@ -3098,6 +3110,7 @@ No files changed, compilation skipped
30983110
});
30993111

31003112
forgetest_init!(can_build_skip_glob, |prj, cmd| {
3113+
prj.initialize_default_contracts();
31013114
prj.add_test(
31023115
"Foo",
31033116
r"
@@ -3128,8 +3141,7 @@ Compiler run successful!
31283141
"#]]);
31293142
});
31303143

3131-
forgetest_init!(can_build_specific_paths, |prj, cmd| {
3132-
prj.wipe();
3144+
forgetest!(can_build_specific_paths, |prj, cmd| {
31333145
prj.add_source(
31343146
"Counter.sol",
31353147
r"
@@ -3202,6 +3214,7 @@ Error: No source files found in specified build paths.
32023214

32033215
// checks that build --sizes includes all contracts even if unchanged
32043216
forgetest_init!(can_build_sizes_repeatedly, |prj, cmd| {
3217+
prj.initialize_default_contracts();
32053218
prj.clear_cache();
32063219

32073220
cmd.args(["build", "--sizes"]).assert_success().stdout_eq(str![[r#"
@@ -3241,6 +3254,7 @@ forgetest_init!(can_build_sizes_repeatedly, |prj, cmd| {
32413254

32423255
// checks that build --names includes all contracts even if unchanged
32433256
forgetest_init!(can_build_names_repeatedly, |prj, cmd| {
3257+
prj.initialize_default_contracts();
32443258
prj.clear_cache();
32453259

32463260
cmd.args(["build", "--names"]).assert_success().stdout_eq(str![[r#"
@@ -3260,6 +3274,7 @@ Compiler run successful!
32603274
});
32613275

32623276
forgetest_init!(can_inspect_counter_pretty, |prj, cmd| {
3277+
prj.initialize_default_contracts();
32633278
cmd.args(["inspect", "src/Counter.sol:Counter", "abi"]).assert_success().stdout_eq(str![[r#"
32643279
32653280
╭----------+---------------------------------+------------╮
@@ -3555,6 +3570,7 @@ forgetest!(inspect_custom_counter_very_huge_method_identifiers_unwrapped, |prj,
35553570
});
35563571

35573572
forgetest_init!(can_inspect_standard_json, |prj, cmd| {
3573+
prj.initialize_default_contracts();
35583574
cmd.args(["inspect", "src/Counter.sol:Counter", "standard-json"]).assert_success().stdout_eq(str![[r#"
35593575
{
35603576
"language": "Solidity",
@@ -3602,6 +3618,7 @@ forgetest_init!(can_inspect_standard_json, |prj, cmd| {
36023618
});
36033619

36043620
forgetest_init!(can_inspect_libraries, |prj, cmd| {
3621+
prj.initialize_default_contracts();
36053622
prj.add_source(
36063623
"Source.sol",
36073624
r#"
@@ -3638,6 +3655,7 @@ Dynamically linked libraries:
36383655

36393656
// checks that `clean` also works with the "out" value set in Config
36403657
forgetest_init!(gas_report_include_tests, |prj, cmd| {
3658+
prj.initialize_default_contracts();
36413659
prj.update_config(|config| {
36423660
config.gas_reports_include_tests = true;
36433661
config.fuzz.runs = 1;
@@ -3821,6 +3839,7 @@ contract FooBarTest is DSTest {
38213839

38223840
// <https://github.com/foundry-rs/foundry/issues/5847>
38233841
forgetest_init!(can_bind_enum_modules, |prj, cmd| {
3842+
prj.initialize_default_contracts();
38243843
prj.clear();
38253844

38263845
prj.add_source(
@@ -3852,7 +3871,10 @@ Bindings have been generated to [..]"#
38523871

38533872
// forge bind e2e
38543873
forgetest_init!(can_bind_e2e, |prj, cmd| {
3855-
cmd.args(["bind"]).assert_success().stdout_eq(str![[r#"No files changed, compilation skipped
3874+
prj.initialize_default_contracts();
3875+
cmd.args(["bind"]).assert_success().stdout_eq(str![[r#"[COMPILING_FILES] with [SOLC_VERSION]
3876+
[SOLC_VERSION] [ELAPSED]
3877+
Compiler run successful!
38563878
Generating bindings for 2 contracts
38573879
Bindings have been generated to [..]"#]]);
38583880

@@ -3864,7 +3886,6 @@ Bindings have been generated to [..]"#]]);
38643886
.current_dir(&bindings_path)
38653887
.output()
38663888
.expect("Failed to run cargo build");
3867-
// RUn `cargo build`
38683889

38693890
assert!(out.status.success(), "Cargo build should succeed");
38703891
});

0 commit comments

Comments
 (0)