test(config): Ensure CLI overrides work

This commit is contained in:
Ed Page 2021-04-07 21:10:27 -05:00
parent 29fafd1a63
commit 68c0a0d898
3 changed files with 62 additions and 1 deletions

7
Cargo.lock generated
View file

@ -767,6 +767,12 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "maplit"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.3.4" version = "2.3.4"
@ -1516,6 +1522,7 @@ dependencies = [
"itertools 0.10.0", "itertools 0.10.0",
"kstring", "kstring",
"log", "log",
"maplit",
"once_cell", "once_cell",
"phf", "phf",
"predicates", "predicates",

View file

@ -65,6 +65,7 @@ typed-arena = "2.0.1"
assert_fs = "1.0" assert_fs = "1.0"
predicates = "1.0" predicates = "1.0"
criterion = "0.3" criterion = "0.3"
maplit = "1.0"
[profile.dev] [profile.dev]
panic = "abort" panic = "abort"

View file

@ -133,7 +133,6 @@ impl<'s> ConfigEngine<'s> {
let mut types = Default::default(); let mut types = Default::default();
std::mem::swap(&mut types, &mut config.type_); std::mem::swap(&mut types, &mut config.type_);
let mut types = types let mut types = types
.into_iter() .into_iter()
.map(|(type_, type_engine)| { .map(|(type_, type_engine)| {
@ -338,3 +337,57 @@ impl<'t, 'd> Default for Policy<'t, 'd> {
} }
} }
} }
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_load_config_applies_overrides() {
let storage = ConfigStorage::new();
let mut engine = ConfigEngine::new(&storage);
engine.set_isolated(true);
let type_name = kstring::KString::from_static("toml");
let config = crate::config::Config {
default: crate::config::EngineConfig {
binary: Some(true),
check_filename: Some(true),
..Default::default()
},
type_: maplit::hashmap! {
type_name.clone() => crate::config::TypeEngineConfig {
engine: crate::config::EngineConfig {
check_filename: Some(false),
check_file: Some(true),
..Default::default()
},
..Default::default()
},
},
overrides: crate::config::EngineConfig {
binary: Some(false),
check_file: Some(false),
..Default::default()
},
..Default::default()
};
engine.set_overrides(config);
let cwd = std::path::Path::new(".");
let loaded = engine.load_config(&cwd).unwrap();
assert_eq!(loaded.default.binary, Some(false));
assert_eq!(loaded.default.check_filename, Some(true));
assert_eq!(loaded.default.check_file, Some(false));
assert_eq!(loaded.type_[type_name.as_str()].engine.binary, Some(false));
assert_eq!(
loaded.type_[type_name.as_str()].engine.check_filename,
Some(false)
);
assert_eq!(
loaded.type_[type_name.as_str()].engine.check_file,
Some(false)
);
}
}