gather_all_code_from_crates/
build_effective_config_from_cli.rs1crate::ix!();
2
3pub fn build_effective_config_from_cli() -> Result<EffectiveConfig, AppError> {
6 let cli = Cli::from_args();
7
8 let global_cfg = match load_global_config() {
10 Ok(cfg) => cfg,
11 Err(_e) => {
12 GlobalConfigBuilder::default()
14 .build()
15 .map_err(|_| AppError::Config { reason: ErrorReason::Config })?
16 }
17 };
18
19 EffectiveConfig::from_cli_and_global(&cli, &global_cfg)
21}
22
23#[cfg(test)]
24mod build_effective_config_from_cli_tests {
25 use super::*;
26 use std::env;
27
28 #[test]
29 fn test_effective_config_with_mocked_cli_and_global() {
30 let global_cfg = GlobalConfigBuilder::default()
32 .default_include_tests(true)
33 .default_omit_bodies(false)
34 .build().unwrap();
35
36 let cli = CliBuilder::default()
39 .crates(vec![])
40 .include_tests(false)
41 .omit_private(true)
42 .omit_bodies(false)
43 .excluded_files(vec!["some_file.rs".to_string()])
44 .build()
45 .unwrap();
46
47 let eff = EffectiveConfig::from_cli_and_global(&cli, &global_cfg).unwrap();
49
50 assert_eq!(*eff.criteria().include_tests(), true);
53 assert_eq!(*eff.criteria().omit_private(), true);
55 assert_eq!(*eff.criteria().omit_bodies(), false);
57 assert!(eff.criteria().excluded_files().contains(&"some_file.rs".to_string()));
59 }
60
61 #[test]
62 fn test_build_effective_config_from_cli_with_no_global_config() {
63 let original_home = std::env::var_os("HOME");
65 std::env::remove_var("HOME");
66
67 let args = vec!["myprog", "--include-tests", "--omit-private"];
69 let cli = Cli::from_iter(args);
70
71 let global_cfg = match GlobalConfigBuilder::default().build() {
73 Ok(cfg) => cfg,
74 Err(_) => panic!("Failed to build default global config"),
75 };
76
77 let result = EffectiveConfig::from_cli_and_global(&cli, &global_cfg);
79 assert!(result.is_ok());
80 let eff = result.unwrap();
81
82 assert_eq!(*eff.criteria().include_tests(), true);
84 assert_eq!(*eff.criteria().omit_private(), true);
85
86 if let Some(h) = original_home {
88 std::env::set_var("HOME", h);
89 }
90 }
91}