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);
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);
}
}
}