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
21 changes: 11 additions & 10 deletions crates/forge/src/run_tests/package.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@ use crate::{
TestArgs,
block_number_map::BlockNumberMap,
combine_configs::combine_configs,
run_tests::messages::{
collected_tests_count::CollectedTestsCountMessage, tests_run::TestsRunMessage,
tests_summary::TestsSummaryMessage,
run_tests::{
messages::{
collected_tests_count::CollectedTestsCountMessage, tests_run::TestsRunMessage,
tests_summary::TestsSummaryMessage,
},
workspace::WorkspaceDirs,
},
scarb::{
config::{ForgeConfigFromScarb, ForkTarget},
Expand All @@ -20,7 +23,6 @@ use crate::{
warn::warn_if_incompatible_rpc_version,
};
use anyhow::Result;
use camino::{Utf8Path, Utf8PathBuf};
use cheatnet::runtime_extensions::forge_runtime_extension::contracts_data::ContractsData;
use console::Style;
use forge_runner::{
Expand Down Expand Up @@ -74,14 +76,13 @@ impl RunForPackageArgs {
package: PackageMetadata,
scarb_metadata: &Metadata,
args: &TestArgs,
cache_dir: &Utf8PathBuf,
artifacts_dir: &Utf8Path,
workspace_dirs: &WorkspaceDirs,
ui: &UI,
) -> Result<RunForPackageArgs> {
let raw_test_targets = load_test_artifacts(artifacts_dir, &package)?;
let raw_test_targets = load_test_artifacts(&workspace_dirs.artifacts_dir, &package)?;

let contracts = get_contracts_artifacts_and_source_sierra_paths(
artifacts_dir,
&workspace_dirs.artifacts_dir,
&package,
ui,
CompilationOpts {
Expand All @@ -106,7 +107,7 @@ impl RunForPackageArgs {
args.max_n_steps,
args.tracked_resource,
contracts_data,
cache_dir.clone(),
workspace_dirs.cache_dir.clone(),
&forge_config_from_scarb,
&args.additional_args,
args.trace_args.clone(),
Expand All @@ -120,7 +121,7 @@ impl RunForPackageArgs {
args.only_ignored,
args.include_ignored,
args.rerun_failed,
FailedTestsCache::new(cache_dir),
FailedTestsCache::new(&workspace_dirs.cache_dir),
);

Ok(RunForPackageArgs {
Expand Down
39 changes: 26 additions & 13 deletions crates/forge/src/run_tests/workspace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use crate::{
scarb::build_artifacts_with_scarb, shared_cache::FailedTestsCache,
};
use anyhow::{Context, Result};
use camino::Utf8PathBuf;
use forge_runner::test_case_summary::AnyTestCaseSummary;
use forge_runner::{CACHE_DIR, test_target_summary::TestTargetSummary};
use foundry_ui::UI;
Expand All @@ -19,14 +20,35 @@ use shared::consts::SNFORGE_TEST_FILTER;
use std::env;
use std::sync::Arc;

pub struct WorkspaceDirs {
pub artifacts_dir: Utf8PathBuf,
pub cache_dir: Utf8PathBuf,
pub root_dir: Utf8PathBuf,
}

impl WorkspaceDirs {
#[must_use]
pub fn new(scarb_metadata: &Metadata) -> Self {
let artifacts_dir =
target_dir_for_workspace(scarb_metadata).join(&scarb_metadata.current_profile);
let workspace_root = &scarb_metadata.workspace.root;
let cache_dir = workspace_root.join(CACHE_DIR);

Self {
artifacts_dir,
cache_dir,
root_dir: workspace_root.clone(),
}
}
}

#[tracing::instrument(skip_all, level = "debug")]
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);
let workspace_dirs = WorkspaceDirs::new(scarb_metadata);

let packages: Vec<PackageMetadata> = args
.scarb_args
Expand Down Expand Up @@ -56,21 +78,12 @@ pub async fn run_for_workspace(
let mut all_tests = vec![];
let mut total_filtered_count = Some(0);

let workspace_root = &scarb_metadata.workspace.root;
let cache_dir = workspace_root.join(CACHE_DIR);
let packages_len = packages.len();

for package in packages {
env::set_current_dir(&package.root)?;

let args = RunForPackageArgs::build(
package,
scarb_metadata,
&args,
&cache_dir,
&artifacts_dir_path,
&ui,
)?;
let args = RunForPackageArgs::build(package, scarb_metadata, &args, &workspace_dirs, &ui)?;

let result = run_for_package(args, &mut block_number_map, ui.clone()).await?;

Expand All @@ -87,7 +100,7 @@ pub async fn run_for_workspace(
let overall_summary = OverallSummaryMessage::new(&all_tests, total_filtered_count);
let all_failed_tests: Vec<AnyTestCaseSummary> = extract_failed_tests(all_tests).collect();

FailedTestsCache::new(&cache_dir).save_failed_tests(&all_failed_tests)?;
FailedTestsCache::new(&workspace_dirs.cache_dir).save_failed_tests(&all_failed_tests)?;

if !block_number_map.get_url_to_latest_block_number().is_empty() {
ui.println(&LatestBlocksNumbersMessage::new(
Expand Down
Loading