summaryrefslogtreecommitdiffstats
path: root/src/bootstrap/config/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootstrap/config/tests.rs')
-rw-r--r--src/bootstrap/config/tests.rs60
1 files changed, 57 insertions, 3 deletions
diff --git a/src/bootstrap/config/tests.rs b/src/bootstrap/config/tests.rs
index 5a105007f..50569eb4f 100644
--- a/src/bootstrap/config/tests.rs
+++ b/src/bootstrap/config/tests.rs
@@ -1,5 +1,5 @@
use super::{Config, TomlConfig};
-use std::path::Path;
+use std::{env, path::Path};
fn toml(config: &str) -> impl '_ + Fn(&Path) -> TomlConfig {
|&_| toml::from_str(config).unwrap()
@@ -11,7 +11,7 @@ fn parse(config: &str) -> Config {
#[test]
fn download_ci_llvm() {
- if crate::native::is_ci_llvm_modified(&parse("")) {
+ if crate::llvm::is_ci_llvm_modified(&parse("")) {
eprintln!("Detected LLVM as non-available: running in CI and modified LLVM in this change");
return;
}
@@ -33,4 +33,58 @@ fn download_ci_llvm() {
));
}
-// FIXME: add test for detecting `src` and `out`
+// FIXME(ozkanonur): extend scope of the test
+// refs:
+// - https://github.com/rust-lang/rust/issues/109120
+// - https://github.com/rust-lang/rust/pull/109162#issuecomment-1496782487
+#[test]
+fn detect_src_and_out() {
+ fn test(cfg: Config, build_dir: Option<&str>) {
+ // This will bring absolute form of `src/bootstrap` path
+ let current_dir = std::env::current_dir().unwrap();
+
+ // get `src` by moving into project root path
+ let expected_src = current_dir.ancestors().nth(2).unwrap();
+ assert_eq!(&cfg.src, expected_src);
+
+ // Sanity check for `src`
+ let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
+ let expected_src = manifest_dir.ancestors().nth(2).unwrap();
+ assert_eq!(&cfg.src, expected_src);
+
+ // test if build-dir was manually given in config.toml
+ if let Some(custom_build_dir) = build_dir {
+ assert_eq!(&cfg.out, Path::new(custom_build_dir));
+ }
+ // test the native bootstrap way
+ else {
+ // This should bring output path of bootstrap in absolute form
+ let cargo_target_dir = env::var_os("CARGO_TARGET_DIR").expect(
+ "CARGO_TARGET_DIR must been provided for the test environment from bootstrap",
+ );
+
+ // Move to `build` from `build/bootstrap`
+ let expected_out = Path::new(&cargo_target_dir).parent().unwrap();
+ assert_eq!(&cfg.out, expected_out);
+
+ let args: Vec<String> = env::args().collect();
+
+ // Another test for `out` as a sanity check
+ //
+ // This will bring something similar to:
+ // `{build-dir}/bootstrap/debug/deps/bootstrap-c7ee91d5661e2804`
+ // `{build-dir}` can be anywhere, not just in the rust project directory.
+ let dep = Path::new(args.first().unwrap());
+ let expected_out = dep.ancestors().nth(4).unwrap();
+
+ assert_eq!(&cfg.out, expected_out);
+ }
+ }
+
+ test(parse(""), None);
+
+ {
+ let build_dir = if cfg!(windows) { Some("C:\\tmp") } else { Some("/tmp") };
+ test(parse("build.build-dir = \"/tmp\""), build_dir);
+ }
+}