Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions crates/forge/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand All @@ -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;

Expand Down Expand Up @@ -331,7 +331,7 @@ pub fn main_execution(ui: Arc<UI>) -> Result<ExitStatus> {
.enable_all()
.build()?;

rt.block_on(run_for_workspace(args, ui))
rt.block_on(test::test(args, ui))
}
ForgeSubcommand::CheckRequirements => {
check_requirements(true, &ui)?;
Expand Down
51 changes: 9 additions & 42 deletions crates/forge/src/run_tests/workspace.rs
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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<UI>) -> Result<ExitStatus> {
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<UI>,
) -> Result<ExitStatus> {
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<PackageMetadata> = 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::<Metadata>(packages.iter());
Expand Down Expand Up @@ -98,7 +65,7 @@ pub async fn run_for_workspace(args: TestArgs, ui: Arc<UI>) -> Result<ExitStatus

let args = RunForPackageArgs::build(
package,
&scarb_metadata,
scarb_metadata,
&args,
&cache_dir,
&artifacts_dir_path,
Expand Down
52 changes: 52 additions & 0 deletions crates/forge/src/test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
use crate::profile_validation::check_profile_compatibility;
use crate::run_tests::workspace::run_for_workspace;
use crate::warn::warn_if_snforge_std_does_not_match_package_version;
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};
use anyhow::Result;
use foundry_ui::UI;
use scarb_api::metadata::MetadataOpts;
use scarb_api::metadata::metadata_with_opts;
use scarb_api::version::scarb_version;
use std::{env, sync::Arc};

#[tracing::instrument(skip_all, level = "debug")]
pub async fn test(args: TestArgs, ui: Arc<UI>) -> Result<ExitStatus> {
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 => (),
}
}
Loading