Skip to content

Commit

Permalink
Disallow non-same compare-mode-nll
Browse files Browse the repository at this point in the history
  • Loading branch information
jackh726 committed May 23, 2022
1 parent 07e7b43 commit 2c75eca
Show file tree
Hide file tree
Showing 9 changed files with 48 additions and 23 deletions.
1 change: 0 additions & 1 deletion src/test/ui/json-multiple.nll.stderr

This file was deleted.

1 change: 1 addition & 0 deletions src/test/ui/json-multiple.rs
Original file line number Diff line number Diff line change
@@ -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"]
1 change: 0 additions & 1 deletion src/test/ui/json-options.nll.stderr

This file was deleted.

1 change: 1 addition & 0 deletions src/test/ui/json-options.rs
Original file line number Diff line number Diff line change
@@ -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"]
1 change: 0 additions & 1 deletion src/test/ui/rmeta/emit-artifact-notifications.nll.stderr

This file was deleted.

1 change: 1 addition & 0 deletions src/test/ui/rmeta/emit-artifact-notifications.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
2 changes: 0 additions & 2 deletions src/test/ui/save-analysis/emit-notifications.nll.stderr

This file was deleted.

1 change: 1 addition & 0 deletions src/test/ui/save-analysis/emit-notifications.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {}
62 changes: 44 additions & 18 deletions src/tools/compiletest/src/runtest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3112,7 +3112,7 @@ impl<'test> TestCx<'test> {
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);
Expand Down Expand Up @@ -3730,28 +3730,54 @@ impl<'test> TestCx<'test> {
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);

let examined_content =
self.load_expected_output_from_path(&examined_path).unwrap_or_else(|_| String::new());
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);

if canon_content == examined_content {
self.delete_file(&examined_path);
}
}
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 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);
}
}
}
Expand Down

0 comments on commit 2c75eca

Please sign in to comment.