//! Module converting command-line arguments into test configuration.
+use getopts;
use std::env;
use std::path::PathBuf;
-use getopts;
-use super::options::{RunIgnored, ColorConfig, OutputFormat, Options};
-use super::time::TestTimeOptions;
use super::helpers::isatty;
+use super::options::{ColorConfig, Options, OutputFormat, RunIgnored};
+use super::time::TestTimeOptions;
#[derive(Debug)]
pub struct TestOpts {
pub list: bool,
pub filter: Option<String>,
pub filter_exact: bool,
+ pub force_run_in_process: bool,
pub exclude_should_panic: bool,
pub run_ignored: RunIgnored,
pub run_tests: bool,
let mut opts = getopts::Options::new();
opts.optflag("", "include-ignored", "Run ignored and not ignored tests")
.optflag("", "ignored", "Run only ignored tests")
+ .optflag("", "force-run-in-process", "Forces tests to run in-process when panic=abort")
.optflag("", "exclude-should-panic", "Excludes tests marked as should_panic")
.optflag("", "test", "Run tests and not benchmarks")
.optflag("", "bench", "Run benchmarks instead of tests")
"Display one character per test instead of one line. \
Alias to --format=terse",
)
- .optflag(
- "",
- "exact",
- "Exactly match filters rather than by substring",
- )
+ .optflag("", "exact", "Exactly match filters rather than by substring")
.optopt(
"",
"color",
json = Output a json document",
"pretty|terse|json",
)
- .optflag(
- "",
- "show-output",
- "Show captured stdout of successful tests"
- )
+ .optflag("", "show-output", "Show captured stdout of successful tests")
.optopt(
"Z",
"",
Expected format of environment variable is `VARIABLE=WARN_TIME,CRITICAL_TIME`.
Not available for --format=terse",
- "plain|colored"
+ "plain|colored",
)
.optflag(
"",
Expected format of environment variable is `VARIABLE=WARN_TIME,CRITICAL_TIME`.
`CRITICAL_TIME` here means the limit that should not be exceeded by test.
- "
+ ",
);
opts
}
let allow_unstable = get_allow_unstable(&matches)?;
// Unstable flags
+ let force_run_in_process = unstable_optflag!(matches, allow_unstable, "force-run-in-process");
let exclude_should_panic = unstable_optflag!(matches, allow_unstable, "exclude-should-panic");
let include_ignored = unstable_optflag!(matches, allow_unstable, "include-ignored");
let time_options = get_time_options(&matches, allow_unstable)?;
list,
filter,
filter_exact: exact,
+ force_run_in_process,
exclude_should_panic,
run_ignored,
run_tests,
// Gets the CLI options assotiated with `report-time` feature.
fn get_time_options(
matches: &getopts::Matches,
- allow_unstable: bool)
--> OptPartRes<Option<TestTimeOptions>> {
+ allow_unstable: bool,
+) -> OptPartRes<Option<TestTimeOptions>> {
let report_time = unstable_optflag!(matches, allow_unstable, "report-time");
let colored_opt_str = matches.opt_str("report-time");
let mut report_time_colored = report_time && colored_opt_str == Some("colored".into());
fn get_format(
matches: &getopts::Matches,
quiet: bool,
- allow_unstable: bool
+ allow_unstable: bool,
) -> OptPartRes<OutputFormat> {
let format = match matches.opt_str("format").as_ref().map(|s| &**s) {
None if quiet => OutputFormat::Terse,
Some("terse") => OutputFormat::Terse,
Some("json") => {
if !allow_unstable {
- return Err(
- "The \"json\" format is only accepted on the nightly compiler".into(),
- );
+ return Err("The \"json\" format is only accepted on the nightly compiler".into());
}
OutputFormat::Json
}
fn get_run_ignored(matches: &getopts::Matches, include_ignored: bool) -> OptPartRes<RunIgnored> {
let run_ignored = match (include_ignored, matches.opt_present("ignored")) {
(true, true) => {
- return Err(
- "the options --include-ignored and --ignored are mutually exclusive".into(),
- );
+ return Err("the options --include-ignored and --ignored are mutually exclusive".into());
}
(true, false) => RunIgnored::Yes,
(false, true) => RunIgnored::Only,
}
fn get_filter(matches: &getopts::Matches) -> OptPartRes<Option<String>> {
- let filter = if !matches.free.is_empty() {
- Some(matches.free[0].clone())
- } else {
- None
- };
+ let filter = if !matches.free.is_empty() { Some(matches.free[0].clone()) } else { None };
Ok(filter)
}
if let Some(opt) = matches.opt_str("Z") {
if !is_nightly() {
- return Err(
- "the option `Z` is only accepted on the nightly compiler".into(),
- );
+ return Err("the option `Z` is only accepted on the nightly compiler".into());
}
match &*opt {