diff options
| author | bors <bors@rust-lang.org> | 2022-05-24 01:52:00 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-05-24 01:52:00 +0000 |
| commit | b8d0cd8de090d5c0acb1735d4e8846de277b2604 (patch) | |
| tree | a0321d19af740bcd67d710365bc0268e949dd17d /src/tools | |
| parent | ee160f2f5e73b6f5954bc33f059c316d9e8582c4 (diff) | |
| parent | 2c75eca035bad996dfd40f340e9645236446f4f4 (diff) | |
| download | rust-b8d0cd8de090d5c0acb1735d4e8846de277b2604.tar.gz rust-b8d0cd8de090d5c0acb1735d4e8846de277b2604.zip | |
Auto merge of #97272 - jackh726:ban-compare-mode-nll, r=Mark-Simulacrum
Disallow compare-mode=nll test differences This ensures that new tests don't get added not as revisions if they have nll output. This will make stabilization PR easier. r? `@Mark-Simulacrum`
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/compiletest/src/runtest.rs | 62 |
1 files changed, 44 insertions, 18 deletions
diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index a59a0584d5e..64b6df3567a 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -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); @@ -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); } } } |
