Skip to content

Commit 9ced883

Browse files
committedJan 4, 2021
Auto merge of #9037 - Swatinem:test-cwd, r=alexcrichton
Assert that tests are run in the crate directory To avoid regressions to the test runtime directory, this asserts that all test types (unit, integration, doctest) are executed in the crate (manifest) directory, no matter where that crate is in relation to the workspace root. See #8992 / #8993
2 parents 5463132 + 7137e32 commit 9ced883

File tree

1 file changed

+137
-0
lines changed

1 file changed

+137
-0
lines changed
 

‎tests/testsuite/test.rs

+137
Original file line numberDiff line numberDiff line change
@@ -4245,3 +4245,140 @@ fn bin_env_for_test() {
42454245
p.cargo("test --test check_env").run();
42464246
p.cargo("check --test check_env").run();
42474247
}
4248+
4249+
#[cargo_test]
4250+
fn test_workspaces_cwd() {
4251+
// This tests that all the different test types are executed from the
4252+
// crate directory (manifest_dir), and not from the workspace root.
4253+
4254+
let make_lib_file = |expected| {
4255+
format!(
4256+
r#"
4257+
//! ```
4258+
//! assert_eq!("{expected}", std::fs::read_to_string("file.txt").unwrap());
4259+
//! assert_eq!(
4260+
//! std::path::PathBuf::from(std::env!("CARGO_MANIFEST_DIR")),
4261+
//! std::env::current_dir().unwrap(),
4262+
//! );
4263+
//! ```
4264+
4265+
#[test]
4266+
fn test_unit_{expected}_cwd() {{
4267+
assert_eq!("{expected}", std::fs::read_to_string("file.txt").unwrap());
4268+
assert_eq!(
4269+
std::path::PathBuf::from(std::env!("CARGO_MANIFEST_DIR")),
4270+
std::env::current_dir().unwrap(),
4271+
);
4272+
}}
4273+
"#,
4274+
expected = expected
4275+
)
4276+
};
4277+
let make_test_file = |expected| {
4278+
format!(
4279+
r#"
4280+
#[test]
4281+
fn test_integration_{expected}_cwd() {{
4282+
assert_eq!("{expected}", std::fs::read_to_string("file.txt").unwrap());
4283+
assert_eq!(
4284+
std::path::PathBuf::from(std::env!("CARGO_MANIFEST_DIR")),
4285+
std::env::current_dir().unwrap(),
4286+
);
4287+
}}
4288+
"#,
4289+
expected = expected
4290+
)
4291+
};
4292+
4293+
let p = project()
4294+
.file(
4295+
"Cargo.toml",
4296+
r#"
4297+
[package]
4298+
name = "root-crate"
4299+
version = "0.0.0"
4300+
4301+
[workspace]
4302+
members = [".", "nested-crate", "very/deeply/nested/deep-crate"]
4303+
"#,
4304+
)
4305+
.file("file.txt", "root")
4306+
.file("src/lib.rs", &make_lib_file("root"))
4307+
.file("tests/integration.rs", &make_test_file("root"))
4308+
.file(
4309+
"nested-crate/Cargo.toml",
4310+
r#"
4311+
[package]
4312+
name = "nested-crate"
4313+
version = "0.0.0"
4314+
"#,
4315+
)
4316+
.file("nested-crate/file.txt", "nested")
4317+
.file("nested-crate/src/lib.rs", &make_lib_file("nested"))
4318+
.file(
4319+
"nested-crate/tests/integration.rs",
4320+
&make_test_file("nested"),
4321+
)
4322+
.file(
4323+
"very/deeply/nested/deep-crate/Cargo.toml",
4324+
r#"
4325+
[package]
4326+
name = "deep-crate"
4327+
version = "0.0.0"
4328+
"#,
4329+
)
4330+
.file("very/deeply/nested/deep-crate/file.txt", "deep")
4331+
.file(
4332+
"very/deeply/nested/deep-crate/src/lib.rs",
4333+
&make_lib_file("deep"),
4334+
)
4335+
.file(
4336+
"very/deeply/nested/deep-crate/tests/integration.rs",
4337+
&make_test_file("deep"),
4338+
)
4339+
.build();
4340+
4341+
p.cargo("test --workspace --all")
4342+
.with_stderr_contains("[DOCTEST] root-crate")
4343+
.with_stderr_contains("[DOCTEST] nested-crate")
4344+
.with_stderr_contains("[DOCTEST] deep-crate")
4345+
.with_stdout_contains("test test_unit_root_cwd ... ok")
4346+
.with_stdout_contains("test test_unit_nested_cwd ... ok")
4347+
.with_stdout_contains("test test_unit_deep_cwd ... ok")
4348+
.with_stdout_contains("test test_integration_root_cwd ... ok")
4349+
.with_stdout_contains("test test_integration_nested_cwd ... ok")
4350+
.with_stdout_contains("test test_integration_deep_cwd ... ok")
4351+
.run();
4352+
4353+
p.cargo("test -p root-crate --all")
4354+
.with_stderr_contains("[DOCTEST] root-crate")
4355+
.with_stdout_contains("test test_unit_root_cwd ... ok")
4356+
.with_stdout_contains("test test_integration_root_cwd ... ok")
4357+
.run();
4358+
4359+
p.cargo("test -p nested-crate --all")
4360+
.with_stderr_contains("[DOCTEST] nested-crate")
4361+
.with_stdout_contains("test test_unit_nested_cwd ... ok")
4362+
.with_stdout_contains("test test_integration_nested_cwd ... ok")
4363+
.run();
4364+
4365+
p.cargo("test -p deep-crate --all")
4366+
.with_stderr_contains("[DOCTEST] deep-crate")
4367+
.with_stdout_contains("test test_unit_deep_cwd ... ok")
4368+
.with_stdout_contains("test test_integration_deep_cwd ... ok")
4369+
.run();
4370+
4371+
p.cargo("test --all")
4372+
.cwd("nested-crate")
4373+
.with_stderr_contains("[DOCTEST] nested-crate")
4374+
.with_stdout_contains("test test_unit_nested_cwd ... ok")
4375+
.with_stdout_contains("test test_integration_nested_cwd ... ok")
4376+
.run();
4377+
4378+
p.cargo("test --all")
4379+
.cwd("very/deeply/nested/deep-crate")
4380+
.with_stderr_contains("[DOCTEST] deep-crate")
4381+
.with_stdout_contains("test test_unit_deep_cwd ... ok")
4382+
.with_stdout_contains("test test_integration_deep_cwd ... ok")
4383+
.run();
4384+
}

0 commit comments

Comments
 (0)
Please sign in to comment.