Disallow non-same compare-mode-nll

This commit is contained in:
Jack Huey 2022-05-22 03:04:12 -04:00
parent 07e7b4346c
commit 2c75eca035
9 changed files with 47 additions and 22 deletions

View File

@ -1 +0,0 @@
{"artifact":"$TEST_BUILD_DIR/json-multiple.nll/libjson_multiple.rlib","emit":"link"}

View File

@ -1,5 +1,6 @@
// build-pass
// ignore-pass (different metadata emitted in different modes)
// compile-flags: --json=diagnostic-short --json artifacts --error-format=json
// ignore-compare-mode-nll
#![crate_type = "lib"]

View File

@ -1 +0,0 @@
{"artifact":"$TEST_BUILD_DIR/json-options.nll/libjson_options.rlib","emit":"link"}

View File

@ -1,5 +1,6 @@
// build-pass
// ignore-pass (different metadata emitted in different modes)
// compile-flags: --json=diagnostic-short,artifacts --error-format=json
// ignore-compare-mode-nll
#![crate_type = "lib"]

View File

@ -1 +0,0 @@
{"artifact":"$TEST_BUILD_DIR/rmeta/emit-artifact-notifications.nll/libemit_artifact_notifications.rmeta","emit":"metadata"}

View File

@ -2,6 +2,7 @@
// build-pass
// ignore-pass
// ^-- needed because `--pass check` does not emit the output needed.
// ignore-compare-mode-nll
// A very basic test for the emission of artifact notifications in JSON output.

View File

@ -1,2 +0,0 @@
{"artifact":"$TEST_BUILD_DIR/save-analysis/emit-notifications.nll/save-analysis/libemit_notifications.json","emit":"save-analysis"}
{"artifact":"$TEST_BUILD_DIR/save-analysis/emit-notifications.nll/libemit_notifications.rlib","emit":"link"}

View File

@ -3,5 +3,6 @@
// compile-flags: --crate-type rlib --error-format=json
// ignore-pass
// ^-- needed because otherwise, the .stderr file changes with --pass check
// ignore-compare-mode-nll
pub fn foo() {}

View File

@ -3112,7 +3112,7 @@ fn run_ui_test(&self) {
let expected_fixed = self.load_expected_output(UI_FIXED);
let modes_to_prune = vec![CompareMode::Nll];
self.prune_duplicate_outputs(&modes_to_prune);
self.check_and_prune_duplicate_outputs(&proc_res, &[], &modes_to_prune);
let mut errors = self.load_compare_outputs(&proc_res, TestOutput::Compile, explicit);
let rustfix_input = json::rustfix_diagnostics_only(&proc_res.stderr);
@ -3730,28 +3730,54 @@ fn compare_output(&self, kind: &str, actual: &str, expected: &str) -> usize {
if self.config.bless { 0 } else { 1 }
}
fn prune_duplicate_output(&self, mode: CompareMode, kind: &str, canon_content: &str) {
let examined_path = expected_output_path(&self.testpaths, self.revision, &Some(mode), kind);
fn check_and_prune_duplicate_outputs(
&self,
proc_res: &ProcRes,
modes: &[CompareMode],
require_same_modes: &[CompareMode],
) {
for kind in UI_EXTENSIONS {
let canon_comparison_path =
expected_output_path(&self.testpaths, self.revision, &None, kind);
let examined_content =
self.load_expected_output_from_path(&examined_path).unwrap_or_else(|_| String::new());
let canon = match self.load_expected_output_from_path(&canon_comparison_path) {
Ok(canon) => canon,
_ => continue,
};
let bless = self.config.bless;
let check_and_prune_duplicate_outputs = |mode: &CompareMode, require_same: bool| {
let examined_path =
expected_output_path(&self.testpaths, self.revision, &Some(mode.clone()), kind);
if canon_content == examined_content {
self.delete_file(&examined_path);
}
}
// If there is no output, there is nothing to do
let examined_content = match self.load_expected_output_from_path(&examined_path) {
Ok(content) => content,
_ => return,
};
fn prune_duplicate_outputs(&self, modes: &[CompareMode]) {
if self.config.bless {
for kind in UI_EXTENSIONS {
let canon_comparison_path =
expected_output_path(&self.testpaths, self.revision, &None, kind);
let is_duplicate = canon == examined_content;
if let Ok(canon) = self.load_expected_output_from_path(&canon_comparison_path) {
for mode in modes {
self.prune_duplicate_output(mode.clone(), kind, &canon);
match (bless, require_same, is_duplicate) {
// If we're blessing and the output is the same, then delete the file.
(true, _, true) => {
self.delete_file(&examined_path);
}
// If we want them to be the same, but they are different, then error.
// We do this wether we bless or not
(_, true, false) => {
self.fatal_proc_rec(
&format!("`{}` should not have different output from base test!", kind),
proc_res,
);
}
_ => {}
}
};
for mode in modes {
check_and_prune_duplicate_outputs(mode, false);
}
for mode in require_same_modes {
check_and_prune_duplicate_outputs(mode, true);
}
}
}