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