diff options
| author | Gilad Naaman <gilad.naaman@gmail.com> | 2017-12-13 21:12:19 +0200 |
|---|---|---|
| committer | Gilad Naaman <gilad.naaman@gmail.com> | 2018-01-26 19:46:04 +0200 |
| commit | e570e9e79aa4ebfa5c1f9f9b2345dfb3525e42e7 (patch) | |
| tree | 0f91fee690778b234df4eb4a545a11296d257ea1 /src/libtest | |
| parent | 588a6a35be4446fbaaa792d08efee51e04e61fe8 (diff) | |
| download | rust-e570e9e79aa4ebfa5c1f9f9b2345dfb3525e42e7.tar.gz rust-e570e9e79aa4ebfa5c1f9f9b2345dfb3525e42e7.zip | |
libtest: JSON formatting is now only available in unstable builds
libtest: Added the -Z option for unstable options
Diffstat (limited to 'src/libtest')
| -rw-r--r-- | src/libtest/lib.rs | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs index b11f783770f..caaa4f7e2b7 100644 --- a/src/libtest/lib.rs +++ b/src/libtest/lib.rs @@ -399,7 +399,9 @@ fn optgroups() -> getopts::Options { .optopt("", "format", "Configure formatting of output: pretty = Print verbose output; terse = Display one character per test; - json = Output a json document", "pretty|terse|json"); + json = Output a json document", "pretty|terse|json") + .optopt("Z", "", "Enable nightly-only flags: + unstable-options = Allow use of experimental features", "unstable-options"); return opts } @@ -435,8 +437,19 @@ Test Attributes: usage = options.usage(&message)); } +// FIXME: Copied from libsyntax until linkage errors are resolved. +fn is_nightly() -> bool { + // Whether this is a feature-staged build, i.e. on the beta or stable channel + let disable_unstable_features = option_env!("CFG_DISABLE_UNSTABLE_FEATURES").is_some(); + // Whether we should enable unstable features for bootstrapping + let bootstrap = env::var("RUSTC_BOOTSTRAP").is_ok(); + + bootstrap || !disable_unstable_features +} + // Parses command line arguments into test options pub fn parse_opts(args: &[String]) -> Option<OptRes> { + let mut allow_unstable = false; let opts = optgroups(); let args = args.get(1..).unwrap_or(args); let matches = match opts.parse(args) { @@ -444,6 +457,21 @@ pub fn parse_opts(args: &[String]) -> Option<OptRes> { Err(f) => return Some(Err(f.to_string())), }; + if let Some(opt) = matches.opt_str("Z") { + if !is_nightly() { + return Some(Err("the option `Z` is only accepted on the nightly compiler".into())); + } + + match &*opt { + "unstable-options" => { + allow_unstable = true; + } + _ => { + return Some(Err("Unrecognized option to `Z`".into())); + } + } + }; + if matches.opt_present("h") { usage(&args[0], &opts); return None; @@ -504,7 +532,13 @@ pub fn parse_opts(args: &[String]) -> Option<OptRes> { None if quiet => OutputFormat::Terse, Some("pretty") | None => OutputFormat::Pretty, Some("terse") => OutputFormat::Terse, - Some("json") => OutputFormat::Json, + Some("json") => { + if !allow_unstable { + return Some( + Err("The \"json\" format is only accepted on the nightly compiler".into())); + } + OutputFormat::Json + }, Some(v) => { return Some(Err(format!("argument for --format must be pretty, terse, or json (was \ |
