未验证 提交 529a42a1 编写于 作者: D Dylan DPC 提交者: GitHub

Rollup merge of #67735 - petrochenkov:uibool, r=Mark-Simulacrum

Support `-Z ui-testing=yes/no`

`ui-testing` is now a boolean option (`-Z ui-testing=yes/no`) and can be specified multiple times with later values overriding earlier values (`-Z ui-testing=yes -Z ui-testing=no` == `-Z ui-testing=no`), so it can be set in a hierarchical way, e.g. UI testing infra may enable it by default with specific tests being able to opt-out.

This way we can remove the special opt-out support from `compiletest`.

Inspired by https://github.com/rust-lang/rust/pull/67709.
......@@ -593,6 +593,12 @@ pub fn share_generics(&self) -> bool {
}
}
impl DebuggingOptions {
pub fn ui_testing(&self) -> bool {
self.ui_testing.unwrap_or(false)
}
}
// The type of entry function, so users can have their own entry functions
#[derive(Copy, Clone, PartialEq, Hash, Debug)]
pub enum EntryFnType {
......
......@@ -904,7 +904,7 @@ fn parse_symbol_mangling_version(
`mir` (the MIR), or `mir-cfg` (graphviz formatted MIR)"),
run_dsymutil: Option<bool> = (None, parse_opt_bool, [TRACKED],
"run `dsymutil` and delete intermediate object files"),
ui_testing: bool = (false, parse_bool, [UNTRACKED],
ui_testing: Option<bool> = (None, parse_opt_bool, [UNTRACKED],
"format compiler diagnostics in a way that's better suitable for UI testing"),
embed_bitcode: bool = (false, parse_bool, [TRACKED],
"embed LLVM bitcode in object files"),
......
......@@ -869,7 +869,7 @@ fn default_emitter(
short,
external_macro_backtrace,
);
Box::new(emitter.ui_testing(sopts.debugging_opts.ui_testing))
Box::new(emitter.ui_testing(sopts.debugging_opts.ui_testing()))
} else {
let emitter = match dst {
None => EmitterWriter::stderr(
......@@ -890,7 +890,7 @@ fn default_emitter(
external_macro_backtrace,
),
};
Box::new(emitter.ui_testing(sopts.debugging_opts.ui_testing))
Box::new(emitter.ui_testing(sopts.debugging_opts.ui_testing()))
}
}
(config::ErrorOutputType::Json { pretty, json_rendered }, None) => Box::new(
......@@ -901,7 +901,7 @@ fn default_emitter(
json_rendered,
external_macro_backtrace,
)
.ui_testing(sopts.debugging_opts.ui_testing),
.ui_testing(sopts.debugging_opts.ui_testing()),
),
(config::ErrorOutputType::Json { pretty, json_rendered }, Some(dst)) => Box::new(
JsonEmitter::new(
......@@ -912,7 +912,7 @@ fn default_emitter(
json_rendered,
external_macro_backtrace,
)
.ui_testing(sopts.debugging_opts.ui_testing),
.ui_testing(sopts.debugging_opts.ui_testing()),
),
}
}
......
......@@ -273,7 +273,7 @@ pub fn from_matches(matches: &getopts::Matches) -> Result<Options, i32> {
error_format,
None,
debugging_options.treat_err_as_bug,
debugging_options.ui_testing,
debugging_options.ui_testing(),
);
// check for deprecated options
......
......@@ -449,7 +449,7 @@ fn main_options(options: config::Options) -> i32 {
options.error_format,
None,
options.debugging_options.treat_err_as_bug,
options.debugging_options.ui_testing,
options.debugging_options.ui_testing(),
);
match (options.should_test, options.markdown_input()) {
......@@ -466,7 +466,7 @@ fn main_options(options: config::Options) -> i32 {
let diag_opts = (
options.error_format,
options.debugging_options.treat_err_as_bug,
options.debugging_options.ui_testing,
options.debugging_options.ui_testing(),
options.edition,
);
let show_coverage = options.show_coverage;
......
// disable-ui-testing-normalization
// compile-flags: -Z ui-testing=no
// Line number < 10
type A = B; //~ ERROR
......
......@@ -376,8 +376,6 @@ pub struct TestProps {
pub fail_mode: Option<FailMode>,
// rustdoc will test the output of the `--test` option
pub check_test_line_numbers_match: bool,
// Do not pass `-Z ui-testing` to UI tests
pub disable_ui_testing_normalization: bool,
// customized normalization rules
pub normalize_stdout: Vec<(String, String)>,
pub normalize_stderr: Vec<(String, String)>,
......@@ -422,7 +420,6 @@ pub fn new() -> Self {
fail_mode: None,
ignore_pass: false,
check_test_line_numbers_match: false,
disable_ui_testing_normalization: false,
normalize_stdout: vec![],
normalize_stderr: vec![],
failure_status: -1,
......@@ -569,11 +566,6 @@ fn load_from(&mut self, testfile: &Path, cfg: Option<&str>, config: &Config) {
self.ignore_pass = config.parse_ignore_pass(ln);
}
if !self.disable_ui_testing_normalization {
self.disable_ui_testing_normalization =
config.parse_disable_ui_testing_normalization(ln);
}
if let Some(rule) = config.parse_custom_normalization(ln, "normalize-stdout") {
self.normalize_stdout.push(rule);
}
......@@ -826,10 +818,6 @@ fn parse_failure_status(&self, line: &str) -> Option<i32> {
}
}
fn parse_disable_ui_testing_normalization(&self, line: &str) -> bool {
self.parse_name_directive(line, "disable-ui-testing-normalization")
}
fn parse_check_test_line_numbers_match(&self, line: &str) -> bool {
self.parse_name_directive(line, "check-test-line-numbers-match")
}
......
......@@ -1863,17 +1863,13 @@ fn make_compile_args(
if self.props.error_patterns.is_empty() {
rustc.args(&["--error-format", "json"]);
}
if !self.props.disable_ui_testing_normalization {
rustc.arg("-Zui-testing");
}
rustc.arg("-Zui-testing");
}
Ui => {
if !self.props.compile_flags.iter().any(|s| s.starts_with("--error-format")) {
rustc.args(&["--error-format", "json"]);
}
if !self.props.disable_ui_testing_normalization {
rustc.arg("-Zui-testing");
}
rustc.arg("-Zui-testing");
}
MirOpt => {
rustc.args(&[
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册