Rollup merge of #143232 - jieyouxu:compiletest-maintenance-3, r=Kobzol
[COMPILETEST-UNTANGLE 3/N] Use "directives" consistently within compiletest Instead of using *both* "headers" and "directives" within compiletest to refer to the same thing. This of course induces some churn, but it's been bugging me for a while, and I rather do the self-consistency changes now than later. The first commit tries to be mostly move-only to help per-file git history. I intend to revisit rustc-dev-guide's testing docs, but I don't want to do it on rust-lang/rust side because it would need syncing and might conflict.
This commit is contained in:
commit
df7cac9e03
15 changed files with 43 additions and 44 deletions
|
|
@ -1,6 +1,6 @@
|
|||
/// This was originally generated by collecting directives from ui tests and then extracting their
|
||||
/// directive names. This is **not** an exhaustive list of all possible directives. Instead, this is
|
||||
/// a best-effort approximation for diagnostics. Add new headers to this list when needed.
|
||||
/// a best-effort approximation for diagnostics. Add new directives to this list when needed.
|
||||
const KNOWN_DIRECTIVE_NAMES: &[&str] = &[
|
||||
// tidy-alphabetical-start
|
||||
"add-core-stubs",
|
||||
|
|
|
|||
|
|
@ -11,10 +11,10 @@ use tracing::*;
|
|||
|
||||
use crate::common::{Config, Debugger, FailMode, Mode, PassMode};
|
||||
use crate::debuggers::{extract_cdb_version, extract_gdb_version};
|
||||
use crate::directives::auxiliary::{AuxProps, parse_and_update_aux};
|
||||
use crate::directives::needs::CachedNeedsConditions;
|
||||
use crate::errors::ErrorKind;
|
||||
use crate::executor::{CollectedTestDesc, ShouldPanic};
|
||||
use crate::header::auxiliary::{AuxProps, parse_and_update_aux};
|
||||
use crate::header::needs::CachedNeedsConditions;
|
||||
use crate::help;
|
||||
use crate::util::static_regex;
|
||||
|
||||
|
|
@ -24,11 +24,11 @@ mod needs;
|
|||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
pub struct HeadersCache {
|
||||
pub struct DirectivesCache {
|
||||
needs: CachedNeedsConditions,
|
||||
}
|
||||
|
||||
impl HeadersCache {
|
||||
impl DirectivesCache {
|
||||
pub fn load(config: &Config) -> Self {
|
||||
Self { needs: CachedNeedsConditions::load(config) }
|
||||
}
|
||||
|
|
@ -54,7 +54,7 @@ impl EarlyProps {
|
|||
pub fn from_reader<R: Read>(config: &Config, testfile: &Utf8Path, rdr: R) -> Self {
|
||||
let mut props = EarlyProps::default();
|
||||
let mut poisoned = false;
|
||||
iter_header(
|
||||
iter_directives(
|
||||
config.mode,
|
||||
&config.suite,
|
||||
&mut poisoned,
|
||||
|
|
@ -138,12 +138,12 @@ pub struct TestProps {
|
|||
pub incremental_dir: Option<Utf8PathBuf>,
|
||||
// If `true`, this test will use incremental compilation.
|
||||
//
|
||||
// This can be set manually with the `incremental` header, or implicitly
|
||||
// This can be set manually with the `incremental` directive, or implicitly
|
||||
// by being a part of an incremental mode test. Using the `incremental`
|
||||
// header should be avoided if possible; using an incremental mode test is
|
||||
// directive should be avoided if possible; using an incremental mode test is
|
||||
// preferred. Incremental mode tests support multiple passes, which can
|
||||
// verify that the incremental cache can be loaded properly after being
|
||||
// created. Just setting the header will only verify the behavior with
|
||||
// created. Just setting the directive will only verify the behavior with
|
||||
// creating an incremental cache, but doesn't check that it is created
|
||||
// correctly.
|
||||
//
|
||||
|
|
@ -347,7 +347,7 @@ impl TestProps {
|
|||
|
||||
let mut poisoned = false;
|
||||
|
||||
iter_header(
|
||||
iter_directives(
|
||||
config.mode,
|
||||
&config.suite,
|
||||
&mut poisoned,
|
||||
|
|
@ -642,11 +642,11 @@ impl TestProps {
|
|||
let check_ui = |mode: &str| {
|
||||
// Mode::Crashes may need build-fail in order to trigger llvm errors or stack overflows
|
||||
if config.mode != Mode::Ui && config.mode != Mode::Crashes {
|
||||
panic!("`{}-fail` header is only supported in UI tests", mode);
|
||||
panic!("`{}-fail` directive is only supported in UI tests", mode);
|
||||
}
|
||||
};
|
||||
if config.mode == Mode::Ui && config.parse_name_directive(ln, "compile-fail") {
|
||||
panic!("`compile-fail` header is useless in UI tests");
|
||||
panic!("`compile-fail` directive is useless in UI tests");
|
||||
}
|
||||
let fail_mode = if config.parse_name_directive(ln, "check-fail") {
|
||||
check_ui("check");
|
||||
|
|
@ -662,7 +662,7 @@ impl TestProps {
|
|||
};
|
||||
match (self.fail_mode, fail_mode) {
|
||||
(None, Some(_)) => self.fail_mode = fail_mode,
|
||||
(Some(_), Some(_)) => panic!("multiple `*-fail` headers in a single test"),
|
||||
(Some(_), Some(_)) => panic!("multiple `*-fail` directives in a single test"),
|
||||
(_, None) => {}
|
||||
}
|
||||
}
|
||||
|
|
@ -674,10 +674,10 @@ impl TestProps {
|
|||
(Mode::Codegen, "build-pass") => (),
|
||||
(Mode::Incremental, _) => {
|
||||
if revision.is_some() && !self.revisions.iter().all(|r| r.starts_with("cfail")) {
|
||||
panic!("`{s}` header is only supported in `cfail` incremental tests")
|
||||
panic!("`{s}` directive is only supported in `cfail` incremental tests")
|
||||
}
|
||||
}
|
||||
(mode, _) => panic!("`{s}` header is not supported in `{mode}` tests"),
|
||||
(mode, _) => panic!("`{s}` directive is not supported in `{mode}` tests"),
|
||||
};
|
||||
let pass_mode = if config.parse_name_directive(ln, "check-pass") {
|
||||
check_no_run("check-pass");
|
||||
|
|
@ -693,7 +693,7 @@ impl TestProps {
|
|||
};
|
||||
match (self.pass_mode, pass_mode) {
|
||||
(None, Some(_)) => self.pass_mode = pass_mode,
|
||||
(Some(_), Some(_)) => panic!("multiple `*-pass` headers in a single test"),
|
||||
(Some(_), Some(_)) => panic!("multiple `*-pass` directives in a single test"),
|
||||
(_, None) => {}
|
||||
}
|
||||
}
|
||||
|
|
@ -794,7 +794,7 @@ const KNOWN_JSONDOCCK_DIRECTIVE_NAMES: &[&str] =
|
|||
&["count", "!count", "has", "!has", "is", "!is", "ismany", "!ismany", "set", "!set"];
|
||||
|
||||
/// The (partly) broken-down contents of a line containing a test directive,
|
||||
/// which [`iter_header`] passes to its callback function.
|
||||
/// which [`iter_directives`] passes to its callback function.
|
||||
///
|
||||
/// For example:
|
||||
///
|
||||
|
|
@ -867,7 +867,7 @@ pub(crate) fn check_directive<'a>(
|
|||
|
||||
const COMPILETEST_DIRECTIVE_PREFIX: &str = "//@";
|
||||
|
||||
fn iter_header(
|
||||
fn iter_directives(
|
||||
mode: Mode,
|
||||
_suite: &str,
|
||||
poisoned: &mut bool,
|
||||
|
|
@ -1163,8 +1163,7 @@ enum NormalizeKind {
|
|||
Stderr64bit,
|
||||
}
|
||||
|
||||
/// Parses the regex and replacement values of a `//@ normalize-*` header,
|
||||
/// in the format:
|
||||
/// Parses the regex and replacement values of a `//@ normalize-*` directive, in the format:
|
||||
/// ```text
|
||||
/// "REGEX" -> "REPLACEMENT"
|
||||
/// ```
|
||||
|
|
@ -1373,7 +1372,7 @@ where
|
|||
|
||||
pub(crate) fn make_test_description<R: Read>(
|
||||
config: &Config,
|
||||
cache: &HeadersCache,
|
||||
cache: &DirectivesCache,
|
||||
name: String,
|
||||
path: &Utf8Path,
|
||||
src: R,
|
||||
|
|
@ -1387,7 +1386,7 @@ pub(crate) fn make_test_description<R: Read>(
|
|||
let mut local_poisoned = false;
|
||||
|
||||
// Scan through the test file to handle `ignore-*`, `only-*`, and `needs-*` directives.
|
||||
iter_header(
|
||||
iter_directives(
|
||||
config.mode,
|
||||
&config.suite,
|
||||
&mut local_poisoned,
|
||||
|
|
@ -3,8 +3,8 @@
|
|||
|
||||
use std::iter;
|
||||
|
||||
use super::directives::{AUX_BIN, AUX_BUILD, AUX_CODEGEN_BACKEND, AUX_CRATE, PROC_MACRO};
|
||||
use crate::common::Config;
|
||||
use crate::header::directives::{AUX_BIN, AUX_BUILD, AUX_CODEGEN_BACKEND, AUX_CRATE, PROC_MACRO};
|
||||
|
||||
/// Properties parsed from `aux-*` test directives.
|
||||
#[derive(Clone, Debug, Default)]
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
use std::collections::HashSet;
|
||||
|
||||
use crate::common::{CompareMode, Config, Debugger};
|
||||
use crate::header::IgnoreDecision;
|
||||
use crate::directives::IgnoreDecision;
|
||||
|
||||
const EXTRA_ARCHS: &[&str] = &["spirv"];
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::common::{Config, KNOWN_CRATE_TYPES, KNOWN_TARGET_HAS_ATOMIC_WIDTHS, Sanitizer};
|
||||
use crate::header::{IgnoreDecision, llvm_has_libzstd};
|
||||
use crate::directives::{IgnoreDecision, llvm_has_libzstd};
|
||||
|
||||
pub(super) fn handle_needs(
|
||||
cache: &CachedNeedsConditions,
|
||||
|
|
@ -4,7 +4,7 @@ use camino::Utf8Path;
|
|||
use semver::Version;
|
||||
|
||||
use super::{
|
||||
EarlyProps, HeadersCache, extract_llvm_version, extract_version_range, iter_header,
|
||||
DirectivesCache, EarlyProps, extract_llvm_version, extract_version_range, iter_directives,
|
||||
parse_normalize_rule,
|
||||
};
|
||||
use crate::common::{Config, Debugger, Mode};
|
||||
|
|
@ -17,9 +17,9 @@ fn make_test_description<R: Read>(
|
|||
src: R,
|
||||
revision: Option<&str>,
|
||||
) -> CollectedTestDesc {
|
||||
let cache = HeadersCache::load(config);
|
||||
let cache = DirectivesCache::load(config);
|
||||
let mut poisoned = false;
|
||||
let test = crate::header::make_test_description(
|
||||
let test = crate::directives::make_test_description(
|
||||
config,
|
||||
&cache,
|
||||
name,
|
||||
|
|
@ -785,7 +785,7 @@ fn threads_support() {
|
|||
|
||||
fn run_path(poisoned: &mut bool, path: &Utf8Path, buf: &[u8]) {
|
||||
let rdr = std::io::Cursor::new(&buf);
|
||||
iter_header(Mode::Ui, "ui", poisoned, path, rdr, &mut |_| {});
|
||||
iter_directives(Mode::Ui, "ui", poisoned, path, rdr, &mut |_| {});
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
@ -12,9 +12,9 @@ pub mod common;
|
|||
pub mod compute_diff;
|
||||
mod debuggers;
|
||||
pub mod diagnostics;
|
||||
pub mod directives;
|
||||
pub mod errors;
|
||||
mod executor;
|
||||
pub mod header;
|
||||
mod json;
|
||||
mod raise_fd_limit;
|
||||
mod read2;
|
||||
|
|
@ -37,13 +37,13 @@ use rayon::iter::{ParallelBridge, ParallelIterator};
|
|||
use tracing::debug;
|
||||
use walkdir::WalkDir;
|
||||
|
||||
use self::header::{EarlyProps, make_test_description};
|
||||
use self::directives::{EarlyProps, make_test_description};
|
||||
use crate::common::{
|
||||
CompareMode, Config, Debugger, Mode, PassMode, TestPaths, UI_EXTENSIONS, expected_output_path,
|
||||
output_base_dir, output_relative_path,
|
||||
};
|
||||
use crate::directives::DirectivesCache;
|
||||
use crate::executor::{CollectedTest, ColorConfig, OutputFormat};
|
||||
use crate::header::HeadersCache;
|
||||
use crate::util::logv;
|
||||
|
||||
/// Creates the `Config` instance for this invocation of compiletest.
|
||||
|
|
@ -254,8 +254,8 @@ pub fn parse_config(args: Vec<String>) -> Config {
|
|||
Some(x) => panic!("argument for --color must be auto, always, or never, but found `{}`", x),
|
||||
};
|
||||
let llvm_version =
|
||||
matches.opt_str("llvm-version").as_deref().map(header::extract_llvm_version).or_else(
|
||||
|| header::extract_llvm_version_from_binary(&matches.opt_str("llvm-filecheck")?),
|
||||
matches.opt_str("llvm-version").as_deref().map(directives::extract_llvm_version).or_else(
|
||||
|| directives::extract_llvm_version_from_binary(&matches.opt_str("llvm-filecheck")?),
|
||||
);
|
||||
|
||||
let run_ignored = matches.opt_present("ignored");
|
||||
|
|
@ -618,7 +618,7 @@ pub fn run_tests(config: Arc<Config>) {
|
|||
/// Read-only context data used during test collection.
|
||||
struct TestCollectorCx {
|
||||
config: Arc<Config>,
|
||||
cache: HeadersCache,
|
||||
cache: DirectivesCache,
|
||||
common_inputs_stamp: Stamp,
|
||||
modified_tests: Vec<Utf8PathBuf>,
|
||||
}
|
||||
|
|
@ -654,7 +654,7 @@ pub(crate) fn collect_and_make_tests(config: Arc<Config>) -> Vec<CollectedTest>
|
|||
modified_tests(&config, &config.src_test_suite_root).unwrap_or_else(|err| {
|
||||
fatal!("modified_tests: {}: {err}", config.src_test_suite_root);
|
||||
});
|
||||
let cache = HeadersCache::load(&config);
|
||||
let cache = DirectivesCache::load(&config);
|
||||
|
||||
let cx = TestCollectorCx { config, cache, common_inputs_stamp, modified_tests };
|
||||
let collector = collect_tests_from_dir(&cx, &cx.config.src_test_suite_root, Utf8Path::new(""))
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ use crate::common::{
|
|||
output_base_dir, output_base_name, output_testname_unique,
|
||||
};
|
||||
use crate::compute_diff::{DiffLine, make_diff, write_diff, write_filtered_diff};
|
||||
use crate::directives::TestProps;
|
||||
use crate::errors::{Error, ErrorKind, load_errors};
|
||||
use crate::header::TestProps;
|
||||
use crate::read2::{Truncated, read2_abbreviated};
|
||||
use crate::util::{Utf8PathBufExt, add_dylib_path, logv, static_regex};
|
||||
use crate::{ColorConfig, help, json, stamp_file_path, warning};
|
||||
|
|
@ -2039,7 +2039,7 @@ impl<'test> TestCx<'test> {
|
|||
// Provide more context on failures.
|
||||
filecheck.args(&["--dump-input-context", "100"]);
|
||||
|
||||
// Add custom flags supplied by the `filecheck-flags:` test header.
|
||||
// Add custom flags supplied by the `filecheck-flags:` test directive.
|
||||
filecheck.args(&self.props.filecheck_flags);
|
||||
|
||||
// FIXME(jieyouxu): don't pass an empty Path
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ impl TestCx<'_> {
|
|||
std::fs::remove_file(pdb_file).unwrap();
|
||||
}
|
||||
|
||||
// compile test file (it should have 'compile-flags:-g' in the header)
|
||||
// compile test file (it should have 'compile-flags:-g' in the directive)
|
||||
let should_run = self.run_if_enabled();
|
||||
let compile_result = self.compile_test(should_run, Emit::None);
|
||||
if !compile_result.status.success() {
|
||||
|
|
@ -135,7 +135,7 @@ impl TestCx<'_> {
|
|||
.unwrap_or_else(|e| self.fatal(&e));
|
||||
let mut cmds = dbg_cmds.commands.join("\n");
|
||||
|
||||
// compile test file (it should have 'compile-flags:-g' in the header)
|
||||
// compile test file (it should have 'compile-flags:-g' in the directive)
|
||||
let should_run = self.run_if_enabled();
|
||||
let compiler_run_result = self.compile_test(should_run, Emit::None);
|
||||
if !compiler_run_result.status.success() {
|
||||
|
|
@ -359,7 +359,7 @@ impl TestCx<'_> {
|
|||
}
|
||||
|
||||
fn run_debuginfo_lldb_test_no_opt(&self) {
|
||||
// compile test file (it should have 'compile-flags:-g' in the header)
|
||||
// compile test file (it should have 'compile-flags:-g' in the directive)
|
||||
let should_run = self.run_if_enabled();
|
||||
let compile_result = self.compile_test(should_run, Emit::None);
|
||||
if !compile_result.status.success() {
|
||||
|
|
|
|||
|
|
@ -52,10 +52,10 @@ impl TestCx<'_> {
|
|||
// don't test rustfix with nll right now
|
||||
} else if self.config.rustfix_coverage {
|
||||
// Find out which tests have `MachineApplicable` suggestions but are missing
|
||||
// `run-rustfix` or `run-rustfix-only-machine-applicable` headers.
|
||||
// `run-rustfix` or `run-rustfix-only-machine-applicable` directives.
|
||||
//
|
||||
// This will return an empty `Vec` in case the executed test file has a
|
||||
// `compile-flags: --error-format=xxxx` header with a value other than `json`.
|
||||
// `compile-flags: --error-format=xxxx` directive with a value other than `json`.
|
||||
let suggestions = get_suggestions_from_json(
|
||||
&rustfix_input,
|
||||
&HashSet::new(),
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use std::sync::Arc;
|
|||
use std::{env, fs};
|
||||
|
||||
use build_helper::util::try_run;
|
||||
use compiletest::header::TestProps;
|
||||
use compiletest::directives::TestProps;
|
||||
use config::Config;
|
||||
|
||||
mod config;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue