diff options
| author | Yuki Okushi <jtitor@2k36.org> | 2021-08-08 01:13:41 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-08 01:13:41 +0900 |
| commit | e862383dbb59147c43a1d23ea1a0c3e9f40484ce (patch) | |
| tree | bd308b315e73848e57faefab7d031059b125c982 /src | |
| parent | 508b328c398b84126011f6fe74d018fe855bc242 (diff) | |
| parent | b7e9b1ad7f986425525461e1d53bbd14e2759de9 (diff) | |
| download | rust-e862383dbb59147c43a1d23ea1a0c3e9f40484ce.tar.gz rust-e862383dbb59147c43a1d23ea1a0c3e9f40484ce.zip | |
Rollup merge of #87744 - Smittyvb:xpy-test-force-rerun, r=Mark-Simulacrum
Add x.py option to --force-rerun compiletest tests This can be used like `./x.py test src/test/ui/abi/ --force-rerun`, and is useful when verifying that newly blessed tests don't change between test runs (such as due to being dependent on the current time or memory layout or RNG), without needing to change the test file or find the right file in `build` to remove.
Diffstat (limited to 'src')
| -rw-r--r-- | src/bootstrap/builder/tests.rs | 3 | ||||
| -rw-r--r-- | src/bootstrap/flags.rs | 10 | ||||
| -rw-r--r-- | src/bootstrap/test.rs | 4 | ||||
| -rw-r--r-- | src/tools/compiletest/src/common.rs | 3 | ||||
| -rw-r--r-- | src/tools/compiletest/src/main.rs | 19 |
5 files changed, 32 insertions, 7 deletions
diff --git a/src/bootstrap/builder/tests.rs b/src/bootstrap/builder/tests.rs index e7fb8c0d4d5..bb3ea04d4ac 100644 --- a/src/bootstrap/builder/tests.rs +++ b/src/bootstrap/builder/tests.rs @@ -486,6 +486,7 @@ mod dist { fail_fast: true, doc_tests: DocTests::No, bless: false, + force_rerun: false, compare_mode: None, rustfix_coverage: false, pass: None, @@ -527,6 +528,7 @@ mod dist { fail_fast: true, doc_tests: DocTests::No, bless: false, + force_rerun: false, compare_mode: None, rustfix_coverage: false, pass: None, @@ -583,6 +585,7 @@ mod dist { fail_fast: true, doc_tests: DocTests::Yes, bless: false, + force_rerun: false, compare_mode: None, rustfix_coverage: false, pass: None, diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs index 1b7614b2989..7b74a909c28 100644 --- a/src/bootstrap/flags.rs +++ b/src/bootstrap/flags.rs @@ -102,6 +102,7 @@ pub enum Subcommand { paths: Vec<PathBuf>, /// Whether to automatically update stderr/stdout files bless: bool, + force_rerun: bool, compare_mode: Option<String>, pass: Option<String>, run: Option<String>, @@ -284,6 +285,7 @@ To learn more about a subcommand, run `./x.py <subcommand> -h`", opts.optflag("", "no-doc", "do not run doc tests"); opts.optflag("", "doc", "only run doc tests"); opts.optflag("", "bless", "update all stderr/stdout files of failing ui tests"); + opts.optflag("", "force-rerun", "rerun tests even if the inputs are unchanged"); opts.optopt( "", "compare-mode", @@ -558,6 +560,7 @@ Arguments: "test" | "t" => Subcommand::Test { paths, bless: matches.opt_present("bless"), + force_rerun: matches.opt_present("force-rerun"), compare_mode: matches.opt_str("compare-mode"), pass: matches.opt_str("pass"), run: matches.opt_str("run"), @@ -726,6 +729,13 @@ impl Subcommand { } } + pub fn force_rerun(&self) -> bool { + match *self { + Subcommand::Test { force_rerun, .. } => force_rerun, + _ => false, + } + } + pub fn rustfix_coverage(&self) -> bool { match *self { Subcommand::Test { rustfix_coverage, .. } => rustfix_coverage, diff --git a/src/bootstrap/test.rs b/src/bootstrap/test.rs index 31f18d81c7c..9effdb2c959 100644 --- a/src/bootstrap/test.rs +++ b/src/bootstrap/test.rs @@ -1315,6 +1315,10 @@ note: if you're sure you want to do this, please open an issue as to why. In the cmd.arg("--bless"); } + if builder.config.cmd.force_rerun() { + cmd.arg("--force-rerun"); + } + let compare_mode = builder.config.cmd.compare_mode().or_else(|| { if builder.config.test_compare_mode { self.compare_mode } else { None } diff --git a/src/tools/compiletest/src/common.rs b/src/tools/compiletest/src/common.rs index a5b526be86f..99b0a3454e8 100644 --- a/src/tools/compiletest/src/common.rs +++ b/src/tools/compiletest/src/common.rs @@ -362,6 +362,9 @@ pub struct Config { pub nodejs: Option<String>, /// Path to a npm executable. Used for rustdoc GUI tests pub npm: Option<String>, + + /// Whether to rerun tests even if the inputs are unchanged. + pub force_rerun: bool, } impl Config { diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs index 46432d5e4f5..9e655557fd2 100644 --- a/src/tools/compiletest/src/main.rs +++ b/src/tools/compiletest/src/main.rs @@ -144,6 +144,7 @@ pub fn parse_config(args: Vec<String>) -> Config { "enable this to generate a Rustfix coverage file, which is saved in \ `./<build_base>/rustfix_missing_coverage.txt`", ) + .optflag("", "force-rerun", "rerun tests even if the inputs are unchanged") .optflag("h", "help", "show this message") .reqopt("", "channel", "current Rust channel", "CHANNEL"); @@ -289,6 +290,8 @@ pub fn parse_config(args: Vec<String>) -> Config { llvm_components: matches.opt_str("llvm-components").unwrap(), nodejs: matches.opt_str("nodejs"), npm: matches.opt_str("npm"), + + force_rerun: matches.opt_present("force-rerun"), } } @@ -644,13 +647,15 @@ fn make_test(config: &Config, testpaths: &TestPaths, inputs: &Stamp) -> Vec<test let test_name = crate::make_test_name(config, testpaths, revision); let mut desc = make_test_description(config, test_name, &test_path, src_file, cfg); // Ignore tests that already run and are up to date with respect to inputs. - desc.ignore |= is_up_to_date( - config, - testpaths, - &early_props, - revision.map(|s| s.as_str()), - inputs, - ); + if !config.force_rerun { + desc.ignore |= is_up_to_date( + config, + testpaths, + &early_props, + revision.map(|s| s.as_str()), + inputs, + ); + } test::TestDescAndFn { desc, testfn: make_test_closure(config, testpaths, revision) } }) .collect() |
