tests.rs (4550B)
1 use super::{ 2 current_path_resolver, default_log_file_name, default_log_file_name_from_exe_name, 3 default_shared_runtime_logs_dir, default_shared_runtime_logs_dir_for, env_value, init, 4 init_with_logs_dir, log_name_from_path, log_name_from_stem, normalize_env_value, 5 resolve_default_level, test_hooks, 6 }; 7 use radroots_runtime_paths::{ 8 RadrootsHostEnvironment, RadrootsPathOverrides, RadrootsPathProfile, RadrootsPathResolver, 9 RadrootsPlatform, 10 }; 11 use std::path::PathBuf; 12 use tempfile::tempdir; 13 14 #[test] 15 fn normalize_env_value_handles_empty_and_non_empty_values() { 16 assert_eq!(normalize_env_value(" value "), Some("value".to_string())); 17 assert_eq!(normalize_env_value(" "), None); 18 assert_eq!(normalize_env_value(""), None); 19 } 20 21 #[test] 22 fn env_helpers_return_expected_values() { 23 assert_eq!(env_value("RADROOTS_RUNTIME_TEST_MISSING_KEY"), None); 24 let home = env_value("HOME").expect("home env"); 25 assert!(!home.is_empty()); 26 } 27 28 #[test] 29 fn log_name_helpers_cover_empty_and_non_empty_names() { 30 assert_eq!( 31 log_name_from_stem("radrootsd"), 32 Some("radrootsd.log".to_string()) 33 ); 34 assert_eq!(log_name_from_stem(""), None); 35 } 36 37 #[test] 38 fn log_name_from_path_handles_missing_components() { 39 assert_eq!(log_name_from_path(None), None); 40 assert_eq!(log_name_from_path(Some(PathBuf::from("/"))), None); 41 assert_eq!( 42 log_name_from_path(Some(PathBuf::from("/tmp/radrootsd"))), 43 Some("radrootsd.log".to_string()) 44 ); 45 } 46 47 #[test] 48 fn default_log_file_name_helpers_cover_fallback() { 49 assert_eq!( 50 default_log_file_name_from_exe_name(Some("svc.log".to_string())), 51 "svc.log" 52 ); 53 assert_eq!( 54 default_log_file_name_from_exe_name(None), 55 format!("{}.log", env!("CARGO_PKG_NAME")) 56 ); 57 assert!(!default_log_file_name().trim().is_empty()); 58 } 59 60 #[test] 61 fn resolve_default_level_prefers_env_then_fallback() { 62 let env_value = resolve_default_level(Some("warn".to_string()), Some("info")); 63 assert_eq!(env_value, Some("warn".to_string())); 64 let fallback = resolve_default_level(None, Some("info")); 65 assert_eq!(fallback, Some("info".to_string())); 66 let none = resolve_default_level(None, None); 67 assert_eq!(none, None); 68 } 69 70 #[test] 71 fn default_shared_runtime_logs_dir_uses_shared_namespace() { 72 let resolver = RadrootsPathResolver::new( 73 RadrootsPlatform::Macos, 74 RadrootsHostEnvironment { 75 home_dir: Some(PathBuf::from("/Users/treesap")), 76 ..RadrootsHostEnvironment::default() 77 }, 78 ); 79 80 let logs_dir = default_shared_runtime_logs_dir_for( 81 &resolver, 82 RadrootsPathProfile::InteractiveUser, 83 &RadrootsPathOverrides::default(), 84 ) 85 .expect("default shared runtime logs dir should resolve"); 86 87 assert_eq!( 88 logs_dir, 89 PathBuf::from("/Users/treesap/.radroots/logs/shared/runtime") 90 ); 91 } 92 93 #[test] 94 fn default_shared_runtime_logs_dir_and_init_use_current_resolver() { 95 let dir = tempdir().expect("tempdir"); 96 let resolver = RadrootsPathResolver::new( 97 RadrootsPlatform::Linux, 98 RadrootsHostEnvironment { 99 home_dir: Some(dir.path().to_path_buf()), 100 ..RadrootsHostEnvironment::default() 101 }, 102 ); 103 104 test_hooks::set_current_resolver(Some(resolver)); 105 test_hooks::set_ignore_env(true); 106 107 let logs_dir = default_shared_runtime_logs_dir().expect("default shared runtime logs dir"); 108 assert_eq!(logs_dir, dir.path().join(".radroots/logs/shared/runtime")); 109 110 let _ = init(); 111 112 test_hooks::set_ignore_env(false); 113 test_hooks::set_current_resolver(None); 114 } 115 116 #[test] 117 fn current_path_resolver_falls_back_when_no_override_is_set() { 118 test_hooks::set_current_resolver(None); 119 let expected = format!("{:?}", RadrootsPathResolver::current()); 120 let actual = format!("{:?}", current_path_resolver()); 121 assert_eq!(actual, expected); 122 } 123 124 #[test] 125 fn init_paths_execute() { 126 let dir = tempdir().expect("tempdir"); 127 test_hooks::set_ignore_env(true); 128 let invalid = dir.path().join("not-a-dir"); 129 std::fs::write(&invalid, "file").expect("write invalid path"); 130 let _ = init_with_logs_dir(invalid.as_path(), Some("info")); 131 let invalid_str = invalid.to_string_lossy().to_string(); 132 let _ = init_with_logs_dir(invalid_str.as_str(), Some("info")); 133 let _ = init_with_logs_dir(dir.path(), Some("info")); 134 let owned_path = dir.path().to_path_buf(); 135 let _ = init_with_logs_dir(owned_path.as_path(), None); 136 test_hooks::set_ignore_env(false); 137 }