use log::*;
-use crate::common::{self, CompareMode, Config, Mode};
+use crate::common::{self, CompareMode, Config, Mode, PassMode};
use crate::util;
use crate::extract_gdb_version;
}
}
-#[derive(Clone, Copy, PartialEq, Debug)]
-pub enum PassMode {
- Check,
- Build,
- Run,
-}
-
#[derive(Clone, Debug)]
pub struct TestProps {
// Lines that should be expected, in order, on standard out
// arguments. (In particular, it propagates to the aux-builds.)
pub incremental_dir: Option<PathBuf>,
// How far should the test proceed while still passing.
- pub pass_mode: Option<PassMode>,
+ pass_mode: Option<PassMode>,
+ // Ignore `--pass` overrides from the command line for this test.
+ ignore_pass: bool,
// rustdoc will test the output of the `--test` option
pub check_test_line_numbers_match: bool,
// Do not pass `-Z ui-testing` to UI tests
forbid_output: vec![],
incremental_dir: None,
pass_mode: None,
+ ignore_pass: false,
check_test_line_numbers_match: false,
disable_ui_testing_normalization: false,
normalize_stdout: vec![],
self.update_pass_mode(ln, cfg, config);
+ if !self.ignore_pass {
+ self.ignore_pass = config.parse_ignore_pass(ln);
+ }
+
if !self.disable_ui_testing_normalization {
self.disable_ui_testing_normalization =
config.parse_disable_ui_testing_normalization(ln);
} else if config.parse_name_directive(ln, "build-pass") {
check_no_run("build-pass");
Some(PassMode::Build)
- } else if config.parse_name_directive(ln, "compile-pass") /* compatibility */ {
- check_no_run("compile-pass");
- Some(PassMode::Build)
} else if config.parse_name_directive(ln, "run-pass") {
if config.mode != Mode::Ui && config.mode != Mode::RunPass /* compatibility */ {
panic!("`run-pass` header is only supported in UI tests")
(_, None) => {}
}
}
+
+ pub fn pass_mode(&self, config: &Config) -> Option<PassMode> {
+ if !self.ignore_pass {
+ if let (mode @ Some(_), Some(_)) = (config.force_pass_mode, self.pass_mode) {
+ return mode;
+ }
+ }
+ self.pass_mode
+ }
}
fn iter_header(testfile: &Path, cfg: Option<&str>, it: &mut dyn FnMut(&str)) {
self.parse_name_directive(line, "check-test-line-numbers-match")
}
+ fn parse_ignore_pass(&self, line: &str) -> bool {
+ self.parse_name_directive(line, "ignore-pass")
+ }
+
fn parse_assembly_output(&self, line: &str) -> Option<String> {
self.parse_name_value_directive(line, "assembly-output")
.map(|r| r.trim().to_string())