| use std::path::PathBuf; | |
| use std::process::Command; | |
| use test_utils::{CARGO_CLIPPY_PATH, IS_RUSTC_TEST_SUITE}; | |
| mod test_utils; | |
| #[test] | |
| fn test_module_style_with_dep_in_subdir() { | |
| if IS_RUSTC_TEST_SUITE { | |
| return; | |
| } | |
| let root = PathBuf::from(env!("CARGO_MANIFEST_DIR")); | |
| let target_dir = root.join("target").join("workspace_test"); | |
| let cwd = root.join("tests/workspace_test"); | |
| // Make sure we start with a clean state | |
| Command::new("cargo") | |
| .current_dir(&cwd) | |
| .env("CARGO_TARGET_DIR", &target_dir) | |
| .arg("clean") | |
| .args(["-p", "pass-no-mod-with-dep-in-subdir"]) | |
| .args(["-p", "pass-mod-with-dep-in-subdir"]) | |
| .output() | |
| .unwrap(); | |
| // [#8887](https://github.com/rust-lang/rust-clippy/issues/8887) | |
| // `mod.rs` checks should not be applied to crate dependencies | |
| // located in the subdirectory of workspace | |
| let output = Command::new(&*CARGO_CLIPPY_PATH) | |
| .current_dir(&cwd) | |
| .env("CARGO_INCREMENTAL", "0") | |
| .env("CARGO_TERM_COLOR", "never") | |
| .env("CARGO_TARGET_DIR", &target_dir) | |
| .arg("clippy") | |
| .args(["-p", "pass-no-mod-with-dep-in-subdir"]) | |
| .args(["-p", "pass-mod-with-dep-in-subdir"]) | |
| .arg("--") | |
| .arg("-Cdebuginfo=0") // disable debuginfo to generate less data in the target dir | |
| .output() | |
| .unwrap(); | |
| println!("status: {}", output.status); | |
| println!("stdout: {}", String::from_utf8_lossy(&output.stdout)); | |
| println!("stderr: {}", String::from_utf8_lossy(&output.stderr)); | |
| assert!(output.status.success()); | |
| } | |
| #[test] | |
| fn test_no_deps_ignores_path_deps_in_workspaces() { | |
| if IS_RUSTC_TEST_SUITE { | |
| return; | |
| } | |
| let root = PathBuf::from(env!("CARGO_MANIFEST_DIR")); | |
| let target_dir = root.join("target").join("workspace_test"); | |
| let cwd = root.join("tests/workspace_test"); | |
| // Make sure we start with a clean state | |
| Command::new("cargo") | |
| .current_dir(&cwd) | |
| .env("CARGO_TARGET_DIR", &target_dir) | |
| .arg("clean") | |
| .args(["-p", "subcrate"]) | |
| .args(["-p", "path_dep"]) | |
| .output() | |
| .unwrap(); | |
| // `path_dep` is a path dependency of `subcrate` that would trigger a denied lint. | |
| // Make sure that with the `--no-deps` argument Clippy does not run on `path_dep`. | |
| let output = Command::new(&*CARGO_CLIPPY_PATH) | |
| .current_dir(&cwd) | |
| .env("CARGO_INCREMENTAL", "0") | |
| .env("CARGO_TERM_COLOR", "never") | |
| .env("CARGO_TARGET_DIR", &target_dir) | |
| .arg("clippy") | |
| .args(["-p", "subcrate"]) | |
| .arg("--no-deps") | |
| .arg("--") | |
| .arg("-Cdebuginfo=0") // disable debuginfo to generate less data in the target dir | |
| .args(["--cfg", r#"feature="primary_package_test""#]) | |
| .output() | |
| .unwrap(); | |
| println!("status: {}", output.status); | |
| println!("stdout: {}", String::from_utf8_lossy(&output.stdout)); | |
| println!("stderr: {}", String::from_utf8_lossy(&output.stderr)); | |
| assert!(output.status.success()); | |
| let lint_path_dep = || { | |
| // Test that without the `--no-deps` argument, `path_dep` is linted. | |
| let output = Command::new(&*CARGO_CLIPPY_PATH) | |
| .current_dir(&cwd) | |
| .env("CARGO_INCREMENTAL", "0") | |
| .env("CARGO_TERM_COLOR", "never") | |
| .env("CARGO_TARGET_DIR", &target_dir) | |
| .arg("clippy") | |
| .args(["-p", "subcrate"]) | |
| .arg("--") | |
| .arg("-Cdebuginfo=0") // disable debuginfo to generate less data in the target dir | |
| .args(["--cfg", r#"feature="primary_package_test""#]) | |
| .output() | |
| .unwrap(); | |
| println!("status: {}", output.status); | |
| println!("stdout: {}", String::from_utf8_lossy(&output.stdout)); | |
| println!("stderr: {}", String::from_utf8_lossy(&output.stderr)); | |
| assert!(!output.status.success()); | |
| assert!( | |
| String::from_utf8(output.stderr) | |
| .unwrap() | |
| .contains("error: empty `loop {}` wastes CPU cycles") | |
| ); | |
| }; | |
| // Make sure Cargo is aware of the removal of `--no-deps`. | |
| lint_path_dep(); | |
| let successful_build = || { | |
| let output = Command::new(&*CARGO_CLIPPY_PATH) | |
| .current_dir(&cwd) | |
| .env("CARGO_INCREMENTAL", "0") | |
| .env("CARGO_TERM_COLOR", "never") | |
| .env("CARGO_TARGET_DIR", &target_dir) | |
| .arg("clippy") | |
| .args(["-p", "subcrate"]) | |
| .arg("--") | |
| .arg("-Cdebuginfo=0") // disable debuginfo to generate less data in the target dir | |
| .output() | |
| .unwrap(); | |
| println!("status: {}", output.status); | |
| println!("stdout: {}", String::from_utf8_lossy(&output.stdout)); | |
| println!("stderr: {}", String::from_utf8_lossy(&output.stderr)); | |
| assert!(output.status.success()); | |
| output | |
| }; | |
| // Trigger a successful build, so Cargo would like to cache the build result. | |
| successful_build(); | |
| // Make sure there's no spurious rebuild when nothing changes. | |
| let stderr = String::from_utf8(successful_build().stderr).unwrap(); | |
| assert!(!stderr.contains("Compiling")); | |
| assert!(!stderr.contains("Checking")); | |
| assert!(stderr.contains("Finished")); | |
| // Make sure Cargo is aware of the new `--cfg` flag. | |
| lint_path_dep(); | |
| } |