diff --git a/Cargo.lock b/Cargo.lock index 6789ea504..bf7893a4b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4601,6 +4601,7 @@ dependencies = [ "ed25519-dalek", "fs_extra", "hex", + "home", "predicates", "sep5", "serde_json", diff --git a/cmd/crates/soroban-test/Cargo.toml b/cmd/crates/soroban-test/Cargo.toml index d035652d1..61fcc0bd8 100644 --- a/cmd/crates/soroban-test/Cargo.toml +++ b/cmd/crates/soroban-test/Cargo.toml @@ -32,6 +32,7 @@ assert_fs = "1.0.7" predicates = { workspace = true } fs_extra = "1.3.0" toml = { workspace = true } +home = "0.5.9" [dev-dependencies] diff --git a/cmd/crates/soroban-test/tests/it/build.rs b/cmd/crates/soroban-test/tests/it/build.rs index cb63ae907..a2b771cce 100644 --- a/cmd/crates/soroban-test/tests/it/build.rs +++ b/cmd/crates/soroban-test/tests/it/build.rs @@ -2,6 +2,7 @@ use predicates::prelude::predicate; use soroban_cli::xdr::{Limited, Limits, ReadXdr, ScMetaEntry, ScMetaV0}; use soroban_spec_tools::contract::Spec; use soroban_test::TestEnv; +use std::env; use std::io::Cursor; #[test] @@ -16,11 +17,9 @@ fn build_all() { .arg("--print-commands-only") .assert() .success() - .stdout(predicate::eq("\ -cargo rustc --manifest-path=contracts/add/Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release + .stdout(predicate::eq(with_flags("cargo rustc --manifest-path=contracts/add/Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release cargo rustc --manifest-path=contracts/call/Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release -cargo rustc --manifest-path=contracts/add/add2/Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release -")); +cargo rustc --manifest-path=contracts/add/add2/Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release"))); } #[test] @@ -36,9 +35,7 @@ fn build_package_by_name() { .arg("--package=add") .assert() .success() - .stdout(predicate::eq("\ -cargo rustc --manifest-path=contracts/add/Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release -")); + .stdout(predicate::eq(with_flags("cargo rustc --manifest-path=contracts/add/Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release"))); } #[test] @@ -54,9 +51,7 @@ fn build_package_by_current_dir() { .assert() .success() .stdout(predicate::eq( - "\ -cargo rustc --manifest-path=Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release -", + with_flags("cargo rustc --manifest-path=Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release"), )); } @@ -85,6 +80,7 @@ fn build_all_when_in_non_package_directory() { let sandbox = TestEnv::default(); let cargo_dir = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")); let fixture_path = cargo_dir.join("tests/fixtures/workspace/contracts/add/src/"); + sandbox .new_assert_cmd("contract") .current_dir(fixture_path) @@ -92,13 +88,9 @@ fn build_all_when_in_non_package_directory() { .arg("--print-commands-only") .assert() .success() - .stdout(predicate::eq( - "\ -cargo rustc --manifest-path=../Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release -cargo rustc --manifest-path=../../call/Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release -cargo rustc --manifest-path=../add2/Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release -", - )); + .stdout(predicate::eq(with_flags( + "cargo rustc --manifest-path=../Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release" + ))); } #[test] @@ -113,11 +105,7 @@ fn build_default_members() { .arg("--print-commands-only") .assert() .success() - .stdout(predicate::eq( - "\ -cargo rustc --manifest-path=contracts/add/Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release -", - )); + .stdout(predicate::eq(with_flags("cargo rustc --manifest-path=contracts/add/Cargo.toml --crate-type=cdylib --target=wasm32-unknown-unknown --release"))); } #[test] @@ -185,3 +173,30 @@ fn build_with_metadata() { assert_eq!(entries, expected_entries); } + +fn with_flags(expected: &str) -> String { + let cargo_home = home::cargo_home().unwrap(); + let cargo_home = format!("{}", cargo_home.display()); + let registry_prefix = format!("{cargo_home}/registry/src/"); + + let vec: Vec<_> = if env::var("RUSTFLAGS").is_ok() { + expected.split("\n").map(|x| x.to_string()).collect() + } else { + expected + .split("\n") + .map(|x| { + format!( + "CARGO_BUILD_RUSTFLAGS=--remap-path-prefix={}= {}", + registry_prefix, x + ) + }) + .collect() + }; + + return format!( + "\ +{} +", + vec.join("\n") + ); +}