1f1555e47Sopenharmony_ciuse super::AutoCfg; 2f1555e47Sopenharmony_ciuse std::env; 3f1555e47Sopenharmony_ciuse std::path::Path; 4f1555e47Sopenharmony_ci 5f1555e47Sopenharmony_ciimpl AutoCfg { 6f1555e47Sopenharmony_ci fn core_std(&self, path: &str) -> String { 7f1555e47Sopenharmony_ci let krate = if self.no_std { "core" } else { "std" }; 8f1555e47Sopenharmony_ci format!("{}::{}", krate, path) 9f1555e47Sopenharmony_ci } 10f1555e47Sopenharmony_ci 11f1555e47Sopenharmony_ci fn assert_std(&self, probe_result: bool) { 12f1555e47Sopenharmony_ci assert_eq!(!self.no_std, probe_result); 13f1555e47Sopenharmony_ci } 14f1555e47Sopenharmony_ci 15f1555e47Sopenharmony_ci fn assert_min(&self, major: usize, minor: usize, probe_result: bool) { 16f1555e47Sopenharmony_ci assert_eq!(self.probe_rustc_version(major, minor), probe_result); 17f1555e47Sopenharmony_ci } 18f1555e47Sopenharmony_ci 19f1555e47Sopenharmony_ci fn for_test() -> Result<Self, super::error::Error> { 20f1555e47Sopenharmony_ci match env::var_os("TESTS_TARGET_DIR") { 21f1555e47Sopenharmony_ci Some(d) => Self::with_dir(d), 22f1555e47Sopenharmony_ci None => Self::with_dir("target"), 23f1555e47Sopenharmony_ci } 24f1555e47Sopenharmony_ci } 25f1555e47Sopenharmony_ci} 26f1555e47Sopenharmony_ci 27f1555e47Sopenharmony_ci#[test] 28f1555e47Sopenharmony_cifn autocfg_version() { 29f1555e47Sopenharmony_ci let ac = AutoCfg::for_test().unwrap(); 30f1555e47Sopenharmony_ci println!("version: {:?}", ac.rustc_version); 31f1555e47Sopenharmony_ci assert!(ac.probe_rustc_version(1, 0)); 32f1555e47Sopenharmony_ci} 33f1555e47Sopenharmony_ci 34f1555e47Sopenharmony_ci#[test] 35f1555e47Sopenharmony_cifn version_cmp() { 36f1555e47Sopenharmony_ci use super::version::Version; 37f1555e47Sopenharmony_ci let v123 = Version::new(1, 2, 3); 38f1555e47Sopenharmony_ci 39f1555e47Sopenharmony_ci assert!(Version::new(1, 0, 0) < v123); 40f1555e47Sopenharmony_ci assert!(Version::new(1, 2, 2) < v123); 41f1555e47Sopenharmony_ci assert!(Version::new(1, 2, 3) == v123); 42f1555e47Sopenharmony_ci assert!(Version::new(1, 2, 4) > v123); 43f1555e47Sopenharmony_ci assert!(Version::new(1, 10, 0) > v123); 44f1555e47Sopenharmony_ci assert!(Version::new(2, 0, 0) > v123); 45f1555e47Sopenharmony_ci} 46f1555e47Sopenharmony_ci 47f1555e47Sopenharmony_ci#[test] 48f1555e47Sopenharmony_cifn probe_add() { 49f1555e47Sopenharmony_ci let ac = AutoCfg::for_test().unwrap(); 50f1555e47Sopenharmony_ci let add = ac.core_std("ops::Add"); 51f1555e47Sopenharmony_ci let add_rhs = add.clone() + "<i32>"; 52f1555e47Sopenharmony_ci let add_rhs_output = add.clone() + "<i32, Output = i32>"; 53f1555e47Sopenharmony_ci let dyn_add_rhs_output = "dyn ".to_string() + &*add_rhs_output; 54f1555e47Sopenharmony_ci assert!(ac.probe_path(&add)); 55f1555e47Sopenharmony_ci assert!(ac.probe_trait(&add)); 56f1555e47Sopenharmony_ci assert!(ac.probe_trait(&add_rhs)); 57f1555e47Sopenharmony_ci assert!(ac.probe_trait(&add_rhs_output)); 58f1555e47Sopenharmony_ci ac.assert_min(1, 27, ac.probe_type(&dyn_add_rhs_output)); 59f1555e47Sopenharmony_ci} 60f1555e47Sopenharmony_ci 61f1555e47Sopenharmony_ci#[test] 62f1555e47Sopenharmony_cifn probe_as_ref() { 63f1555e47Sopenharmony_ci let ac = AutoCfg::for_test().unwrap(); 64f1555e47Sopenharmony_ci let as_ref = ac.core_std("convert::AsRef"); 65f1555e47Sopenharmony_ci let as_ref_str = as_ref.clone() + "<str>"; 66f1555e47Sopenharmony_ci let dyn_as_ref_str = "dyn ".to_string() + &*as_ref_str; 67f1555e47Sopenharmony_ci assert!(ac.probe_path(&as_ref)); 68f1555e47Sopenharmony_ci assert!(ac.probe_trait(&as_ref_str)); 69f1555e47Sopenharmony_ci assert!(ac.probe_type(&as_ref_str)); 70f1555e47Sopenharmony_ci ac.assert_min(1, 27, ac.probe_type(&dyn_as_ref_str)); 71f1555e47Sopenharmony_ci} 72f1555e47Sopenharmony_ci 73f1555e47Sopenharmony_ci#[test] 74f1555e47Sopenharmony_cifn probe_i128() { 75f1555e47Sopenharmony_ci let ac = AutoCfg::for_test().unwrap(); 76f1555e47Sopenharmony_ci let i128_path = ac.core_std("i128"); 77f1555e47Sopenharmony_ci ac.assert_min(1, 26, ac.probe_path(&i128_path)); 78f1555e47Sopenharmony_ci ac.assert_min(1, 26, ac.probe_type("i128")); 79f1555e47Sopenharmony_ci} 80f1555e47Sopenharmony_ci 81f1555e47Sopenharmony_ci#[test] 82f1555e47Sopenharmony_cifn probe_sum() { 83f1555e47Sopenharmony_ci let ac = AutoCfg::for_test().unwrap(); 84f1555e47Sopenharmony_ci let sum = ac.core_std("iter::Sum"); 85f1555e47Sopenharmony_ci let sum_i32 = sum.clone() + "<i32>"; 86f1555e47Sopenharmony_ci let dyn_sum_i32 = "dyn ".to_string() + &*sum_i32; 87f1555e47Sopenharmony_ci ac.assert_min(1, 12, ac.probe_path(&sum)); 88f1555e47Sopenharmony_ci ac.assert_min(1, 12, ac.probe_trait(&sum)); 89f1555e47Sopenharmony_ci ac.assert_min(1, 12, ac.probe_trait(&sum_i32)); 90f1555e47Sopenharmony_ci ac.assert_min(1, 12, ac.probe_type(&sum_i32)); 91f1555e47Sopenharmony_ci ac.assert_min(1, 27, ac.probe_type(&dyn_sum_i32)); 92f1555e47Sopenharmony_ci} 93f1555e47Sopenharmony_ci 94f1555e47Sopenharmony_ci#[test] 95f1555e47Sopenharmony_cifn probe_std() { 96f1555e47Sopenharmony_ci let ac = AutoCfg::for_test().unwrap(); 97f1555e47Sopenharmony_ci ac.assert_std(ac.probe_sysroot_crate("std")); 98f1555e47Sopenharmony_ci} 99f1555e47Sopenharmony_ci 100f1555e47Sopenharmony_ci#[test] 101f1555e47Sopenharmony_cifn probe_alloc() { 102f1555e47Sopenharmony_ci let ac = AutoCfg::for_test().unwrap(); 103f1555e47Sopenharmony_ci ac.assert_min(1, 36, ac.probe_sysroot_crate("alloc")); 104f1555e47Sopenharmony_ci} 105f1555e47Sopenharmony_ci 106f1555e47Sopenharmony_ci#[test] 107f1555e47Sopenharmony_cifn probe_bad_sysroot_crate() { 108f1555e47Sopenharmony_ci let ac = AutoCfg::for_test().unwrap(); 109f1555e47Sopenharmony_ci assert!(!ac.probe_sysroot_crate("doesnt_exist")); 110f1555e47Sopenharmony_ci} 111f1555e47Sopenharmony_ci 112f1555e47Sopenharmony_ci#[test] 113f1555e47Sopenharmony_cifn probe_no_std() { 114f1555e47Sopenharmony_ci let ac = AutoCfg::for_test().unwrap(); 115f1555e47Sopenharmony_ci assert!(ac.probe_type("i32")); 116f1555e47Sopenharmony_ci assert!(ac.probe_type("[i32]")); 117f1555e47Sopenharmony_ci ac.assert_std(ac.probe_type("Vec<i32>")); 118f1555e47Sopenharmony_ci} 119f1555e47Sopenharmony_ci 120f1555e47Sopenharmony_ci#[test] 121f1555e47Sopenharmony_cifn probe_expression() { 122f1555e47Sopenharmony_ci let ac = AutoCfg::for_test().unwrap(); 123f1555e47Sopenharmony_ci assert!(ac.probe_expression(r#""test".trim_left()"#)); 124f1555e47Sopenharmony_ci ac.assert_min(1, 30, ac.probe_expression(r#""test".trim_start()"#)); 125f1555e47Sopenharmony_ci ac.assert_std(ac.probe_expression("[1, 2, 3].to_vec()")); 126f1555e47Sopenharmony_ci} 127f1555e47Sopenharmony_ci 128f1555e47Sopenharmony_ci#[test] 129f1555e47Sopenharmony_cifn probe_constant() { 130f1555e47Sopenharmony_ci let ac = AutoCfg::for_test().unwrap(); 131f1555e47Sopenharmony_ci assert!(ac.probe_constant("1 + 2 + 3")); 132f1555e47Sopenharmony_ci ac.assert_min(1, 33, ac.probe_constant("{ let x = 1 + 2 + 3; x * x }")); 133f1555e47Sopenharmony_ci ac.assert_min(1, 39, ac.probe_constant(r#""test".len()"#)); 134f1555e47Sopenharmony_ci} 135f1555e47Sopenharmony_ci 136f1555e47Sopenharmony_ci#[test] 137f1555e47Sopenharmony_cifn dir_does_not_contain_target() { 138f1555e47Sopenharmony_ci assert!(!super::dir_contains_target( 139f1555e47Sopenharmony_ci &Some("x86_64-unknown-linux-gnu".into()), 140f1555e47Sopenharmony_ci Path::new("/project/target/debug/build/project-ea75983148559682/out"), 141f1555e47Sopenharmony_ci None, 142f1555e47Sopenharmony_ci )); 143f1555e47Sopenharmony_ci} 144f1555e47Sopenharmony_ci 145f1555e47Sopenharmony_ci#[test] 146f1555e47Sopenharmony_cifn dir_does_contain_target() { 147f1555e47Sopenharmony_ci assert!(super::dir_contains_target( 148f1555e47Sopenharmony_ci &Some("x86_64-unknown-linux-gnu".into()), 149f1555e47Sopenharmony_ci Path::new( 150f1555e47Sopenharmony_ci "/project/target/x86_64-unknown-linux-gnu/debug/build/project-0147aca016480b9d/out" 151f1555e47Sopenharmony_ci ), 152f1555e47Sopenharmony_ci None, 153f1555e47Sopenharmony_ci )); 154f1555e47Sopenharmony_ci} 155f1555e47Sopenharmony_ci 156f1555e47Sopenharmony_ci#[test] 157f1555e47Sopenharmony_cifn dir_does_not_contain_target_with_custom_target_dir() { 158f1555e47Sopenharmony_ci assert!(!super::dir_contains_target( 159f1555e47Sopenharmony_ci &Some("x86_64-unknown-linux-gnu".into()), 160f1555e47Sopenharmony_ci Path::new("/project/custom/debug/build/project-ea75983148559682/out"), 161f1555e47Sopenharmony_ci Some("custom".into()), 162f1555e47Sopenharmony_ci )); 163f1555e47Sopenharmony_ci} 164f1555e47Sopenharmony_ci 165f1555e47Sopenharmony_ci#[test] 166f1555e47Sopenharmony_cifn dir_does_contain_target_with_custom_target_dir() { 167f1555e47Sopenharmony_ci assert!(super::dir_contains_target( 168f1555e47Sopenharmony_ci &Some("x86_64-unknown-linux-gnu".into()), 169f1555e47Sopenharmony_ci Path::new( 170f1555e47Sopenharmony_ci "/project/custom/x86_64-unknown-linux-gnu/debug/build/project-0147aca016480b9d/out" 171f1555e47Sopenharmony_ci ), 172f1555e47Sopenharmony_ci Some("custom".into()), 173f1555e47Sopenharmony_ci )); 174f1555e47Sopenharmony_ci} 175