use super::UnstableFeatures; #[test] fn rustc_bootstrap_parsing() { let is_bootstrap = |env: &str, krate: Option<&str>| { matches!( UnstableFeatures::from_environment_value(krate, Ok(env.to_string())), UnstableFeatures::Cheat ) }; assert!(is_bootstrap("1", None)); assert!(is_bootstrap("1", Some("x"))); // RUSTC_BOOTSTRAP allows specifying a specific crate assert!(is_bootstrap("x", Some("x"))); // RUSTC_BOOTSTRAP allows multiple comma-delimited crates assert!(is_bootstrap("x,y,z", Some("x"))); assert!(is_bootstrap("x,y,z", Some("y"))); // Crate that aren't specified do not get unstable features assert!(!is_bootstrap("x", Some("a"))); assert!(!is_bootstrap("x,y,z", Some("a"))); assert!(!is_bootstrap("x,y,z", None)); // `RUSTC_BOOTSTRAP=0` is not recognized. assert!(!is_bootstrap("0", None)); // `RUSTC_BOOTSTRAP=-1` is force-stable, no unstable features allowed. let is_force_stable = |krate: Option<&str>| { matches!( UnstableFeatures::from_environment_value(krate, Ok("-1".to_string())), UnstableFeatures::Disallow ) }; assert!(is_force_stable(None)); // Does not support specifying any crate. assert!(is_force_stable(Some("x"))); assert!(is_force_stable(Some("x,y,z"))); }