diff --git a/crates/forge/src/lib.rs b/crates/forge/src/lib.rs index a6752018cc..299bf2e9a6 100644 --- a/crates/forge/src/lib.rs +++ b/crates/forge/src/lib.rs @@ -8,7 +8,6 @@ use forge_runner::debugging::TraceArgs; use forge_runner::forge_config::ForgeTrackedResource; use foundry_ui::components::warning::WarningMessage; use foundry_ui::{Message, UI}; -use run_tests::workspace::run_for_workspace; use scarb_api::ScarbCommand; use scarb_api::metadata::metadata; use scarb_ui::args::{FeaturesSpec, PackagesFilter, ProfileSpec}; @@ -29,6 +28,7 @@ mod profile_validation; pub mod run_tests; pub mod scarb; pub mod shared_cache; +pub mod test; pub mod test_filter; mod warn; @@ -331,7 +331,7 @@ pub fn main_execution(ui: Arc) -> Result { .enable_all() .build()?; - rt.block_on(run_for_workspace(args, ui)) + rt.block_on(test::test(args, ui)) } ForgeSubcommand::CheckRequirements => { check_requirements(true, &ui)?; diff --git a/crates/forge/src/run_tests/workspace.rs b/crates/forge/src/run_tests/workspace.rs index 3b0e7535fb..858c48c5df 100644 --- a/crates/forge/src/run_tests/workspace.rs +++ b/crates/forge/src/run_tests/workspace.rs @@ -1,25 +1,15 @@ use super::package::RunForPackageArgs; -use crate::profile_validation::check_profile_compatibility; use crate::run_tests::messages::latest_blocks_numbers::LatestBlocksNumbersMessage; use crate::run_tests::messages::overall_summary::OverallSummaryMessage; use crate::run_tests::messages::tests_failure_summary::TestsFailureSummaryMessage; -use crate::warn::{ - error_if_snforge_std_deprecated_missing, error_if_snforge_std_deprecated_not_compatible, - error_if_snforge_std_not_compatible, warn_if_backtrace_without_panic_hint, - warn_if_snforge_std_deprecated_does_not_match_package_version, -}; use crate::{ - ColorOption, ExitStatus, MINIMAL_SCARB_VERSION_FOR_V2_MACROS_REQUIREMENT, TestArgs, - block_number_map::BlockNumberMap, run_tests::package::run_for_package, + ExitStatus, TestArgs, block_number_map::BlockNumberMap, run_tests::package::run_for_package, scarb::build_artifacts_with_scarb, shared_cache::FailedTestsCache, - warn::warn_if_snforge_std_does_not_match_package_version, }; use anyhow::{Context, Result}; use forge_runner::test_case_summary::AnyTestCaseSummary; use forge_runner::{CACHE_DIR, test_target_summary::TestTargetSummary}; use foundry_ui::UI; -use scarb_api::metadata::{MetadataOpts, metadata_with_opts}; -use scarb_api::version::scarb_version; use scarb_api::{ metadata::{Metadata, PackageMetadata}, target_dir_for_workspace, @@ -30,41 +20,18 @@ use std::env; use std::sync::Arc; #[tracing::instrument(skip_all, level = "debug")] -pub async fn run_for_workspace(args: TestArgs, ui: Arc) -> Result { - match args.color { - // SAFETY: This runs in a single-threaded environment. - ColorOption::Always => unsafe { env::set_var("CLICOLOR_FORCE", "1") }, - // SAFETY: This runs in a single-threaded environment. - ColorOption::Never => unsafe { env::set_var("CLICOLOR", "0") }, - ColorOption::Auto => (), - } - - let scarb_metadata = metadata_with_opts(MetadataOpts { - profile: args.scarb_args.profile.specified(), - ..MetadataOpts::default() - })?; - - check_profile_compatibility(&args, &scarb_metadata)?; - - let scarb_version = scarb_version()?.scarb; - if scarb_version >= MINIMAL_SCARB_VERSION_FOR_V2_MACROS_REQUIREMENT { - error_if_snforge_std_not_compatible(&scarb_metadata)?; - warn_if_snforge_std_does_not_match_package_version(&scarb_metadata, &ui)?; - } else { - error_if_snforge_std_deprecated_missing(&scarb_metadata)?; - error_if_snforge_std_deprecated_not_compatible(&scarb_metadata)?; - warn_if_snforge_std_deprecated_does_not_match_package_version(&scarb_metadata, &ui)?; - } - - warn_if_backtrace_without_panic_hint(&scarb_metadata, &ui); - +pub async fn run_for_workspace( + scarb_metadata: &Metadata, + args: TestArgs, + ui: Arc, +) -> Result { let artifacts_dir_path = - target_dir_for_workspace(&scarb_metadata).join(&scarb_metadata.current_profile); + target_dir_for_workspace(scarb_metadata).join(&scarb_metadata.current_profile); let packages: Vec = args .scarb_args .packages_filter - .match_many(&scarb_metadata) + .match_many(scarb_metadata) .context("Failed to find any packages matching the specified filter")?; let filter = PackagesFilter::generate_for::(packages.iter()); @@ -98,7 +65,7 @@ pub async fn run_for_workspace(args: TestArgs, ui: Arc) -> Result) -> Result { + set_color_envs(&args.color); + + let scarb_metadata = metadata_with_opts(MetadataOpts { + profile: args.scarb_args.profile.specified(), + ..MetadataOpts::default() + })?; + + check_profile_compatibility(&args, &scarb_metadata)?; + + let scarb_version = scarb_version()?.scarb; + + if scarb_version >= MINIMAL_SCARB_VERSION_FOR_V2_MACROS_REQUIREMENT { + error_if_snforge_std_not_compatible(&scarb_metadata)?; + warn_if_snforge_std_does_not_match_package_version(&scarb_metadata, &ui)?; + } else { + error_if_snforge_std_deprecated_missing(&scarb_metadata)?; + error_if_snforge_std_deprecated_not_compatible(&scarb_metadata)?; + warn_if_snforge_std_deprecated_does_not_match_package_version(&scarb_metadata, &ui)?; + } + + warn_if_backtrace_without_panic_hint(&scarb_metadata, &ui); + + run_for_workspace(&scarb_metadata, args, ui).await +} + +fn set_color_envs(color: &ColorOption) { + match color { + // SAFETY: This runs in a single-threaded environment. + ColorOption::Always => unsafe { env::set_var("CLICOLOR_FORCE", "1") }, + // SAFETY: This runs in a single-threaded environment. + ColorOption::Never => unsafe { env::set_var("CLICOLOR", "0") }, + ColorOption::Auto => (), + } +}