1 #![cfg(feature = "toml")]
2
3 use config::{Config, File, FileFormat, Map};
4
make() -> Config5 fn make() -> Config {
6 Config::builder()
7 .add_source(File::new("tests/Settings", FileFormat::Toml))
8 .add_source(File::new("tests/Settings-production", FileFormat::Toml))
9 .build()
10 .unwrap()
11 }
12
13 #[test]
test_merge()14 fn test_merge() {
15 let c = make();
16
17 assert_eq!(c.get("debug").ok(), Some(false));
18 assert_eq!(c.get("production").ok(), Some(true));
19 assert_eq!(c.get("place.rating").ok(), Some(4.9));
20
21 if cfg!(feature = "preserve_order") {
22 let m: Map<String, String> = c.get("place.creator").unwrap();
23 assert_eq!(
24 m.into_iter().collect::<Vec<(String, String)>>(),
25 vec![
26 ("name".to_string(), "Somebody New".to_string()),
27 ("username".to_string(), "jsmith".to_string()),
28 ("email".to_string(), "jsmith@localhost".to_string()),
29 ]
30 );
31 } else {
32 assert_eq!(
33 c.get("place.creator.name").ok(),
34 Some("Somebody New".to_string())
35 );
36 }
37 }
38
39 #[test]
test_merge_whole_config()40 fn test_merge_whole_config() {
41 let builder1 = Config::builder().set_override("x", 10).unwrap();
42 let builder2 = Config::builder().set_override("y", 25).unwrap();
43
44 let config1 = builder1.build_cloned().unwrap();
45 let config2 = builder2.build_cloned().unwrap();
46
47 assert_eq!(config1.get("x").ok(), Some(10));
48 assert_eq!(config2.get::<()>("x").ok(), None);
49
50 assert_eq!(config2.get("y").ok(), Some(25));
51 assert_eq!(config1.get::<()>("y").ok(), None);
52
53 let config3 = builder1.add_source(config2).build().unwrap();
54
55 assert_eq!(config3.get("x").ok(), Some(10));
56 assert_eq!(config3.get("y").ok(), Some(25));
57 }
58