X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=tests%2Fdogfood.rs;h=81af3d3033b23c268a152258d74a30a8cd0d4ecc;hb=e820a03d1c905d58b27d7ac6d85f450f9754ba79;hp=dcbfa90e6112aadc1c926dee5943505e49251fa6;hpb=df7cff31dc3288d168ce307c2127edb4e3160616;p=rust.git diff --git a/tests/dogfood.rs b/tests/dogfood.rs index dcbfa90e611..81af3d3033b 100644 --- a/tests/dogfood.rs +++ b/tests/dogfood.rs @@ -1,30 +1,70 @@ -// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. +// Dogfood cannot run on Windows +#![cfg(not(windows))] +use lazy_static::lazy_static; +use std::path::PathBuf; +use std::process::Command; + +mod cargo; + +lazy_static! { + static ref CLIPPY_PATH: PathBuf = cargo::TARGET_LIB.join("cargo-clippy"); +} #[test] -fn dogfood() { - if option_env!("RUSTC_TEST_SUITE").is_some() || cfg!(windows) { +fn dogfood_clippy() { + // run clippy on itself and fail the test if lint warnings are reported + if cargo::is_rustc_test_suite() { return; } - let root_dir = std::env::current_dir().unwrap(); - for d in &[".", "clippy_lints", "rustc_tools_util", "clippy_dev"] { - std::env::set_current_dir(root_dir.join(d)).unwrap(); - let output = std::process::Command::new("cargo") - .arg("run") - .arg("--bin") - .arg("cargo-clippy") - .arg("--all-features") - .arg("--manifest-path") - .arg(root_dir.join("Cargo.toml")) - .args(&["--", "-W clippy::internal -W clippy::pedantic"]) - .env("CLIPPY_DOGFOOD", "true") + let root_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + + let output = Command::new(&*CLIPPY_PATH) + .current_dir(root_dir) + .env("CLIPPY_DOGFOOD", "1") + .env("CARGO_INCREMENTAL", "0") + .arg("clippy-preview") + .arg("--all-targets") + .arg("--all-features") + .arg("--") + .args(&["-D", "clippy::all"]) + .args(&["-D", "clippy::internal"]) + .args(&["-D", "clippy::pedantic"]) + .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 dogfood_subprojects() { + // run clippy on remaining subprojects and fail the test if lint warnings are reported + if cargo::is_rustc_test_suite() { + return; + } + let root_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + + for d in &[ + "clippy_workspace_tests", + "clippy_workspace_tests/src", + "clippy_workspace_tests/subcrate", + "clippy_workspace_tests/subcrate/src", + "clippy_dev", + "rustc_tools_util", + ] { + let output = Command::new(&*CLIPPY_PATH) + .current_dir(root_dir.join(d)) + .env("CLIPPY_DOGFOOD", "1") + .env("CARGO_INCREMENTAL", "0") + .arg("clippy") + .arg("--") + .args(&["-D", "clippy::all"]) + .args(&["-D", "clippy::pedantic"]) + .arg("-Cdebuginfo=0") // disable debuginfo to generate less data in the target dir .output() .unwrap(); println!("status: {}", output.status);