use keyhog_core::ScanConfig;
#[test]
fn default_config_valid() {
let config = ScanConfig::default();
assert!(keyhog_core::testing::CoreTestApi::scan_config_validate(
&keyhog_core::testing::TestApi,
&config
)
.is_ok());
assert!(
(config.min_confidence - 0.40).abs() < 1e-9,
"default min_confidence must be the canonical tuned 0.40; got {}",
config.min_confidence
);
assert_eq!(
config.max_decode_depth,
keyhog_core::testing::CoreTestApi::max_decode_depth_limit(&keyhog_core::testing::TestApi,),
"default max_decode_depth must be the canonical 10 (decode-through depth); got {}",
config.max_decode_depth
);
assert!(config.entropy_enabled, "entropy must default to on");
assert!(
config.unicode_normalization,
"unicode normalization must default to on"
);
assert_eq!(
config.max_file_size,
keyhog_core::DEFAULT_MAX_FILE_SIZE_BYTES,
"default max_file_size must be single-sourced with FilesystemSource"
);
assert!(
config.max_matches_per_chunk >= 100,
"default max_matches_per_chunk too low: {}",
config.max_matches_per_chunk
);
assert!(
!config
.test_keywords
.iter()
.any(|keyword| keyword.eq_ignore_ascii_case("dummy")),
"placeholder words must be owned by rules/placeholder_words.toml, not duplicated in test_keywords"
);
}
#[test]
fn invalid_depth_rejected() {
let config = ScanConfig {
max_decode_depth: 100,
..Default::default()
};
assert!(keyhog_core::testing::CoreTestApi::scan_config_validate(
&keyhog_core::testing::TestApi,
&config
)
.is_err());
}
#[test]
fn invalid_confidence_rejected() {
let config = ScanConfig {
min_confidence: 1.5,
..Default::default()
};
assert!(keyhog_core::testing::CoreTestApi::scan_config_validate(
&keyhog_core::testing::TestApi,
&config
)
.is_err());
}