use std::fs;
use tempfile::TempDir;
use linecheck::{CheckOptions, ConfigResolver, Status, check_file};
use super::helpers::write;
#[test]
fn config_resolver_walks_up_to_parent() {
let dir = TempDir::new().unwrap();
let config_content = "rules:\n - pattern: \"**/*.txt\"\n warn: 3\n error: 10\n";
fs::write(dir.path().join("linecheck.yml"), config_content).unwrap();
let sub = dir.path().join("sub");
fs::create_dir(&sub).unwrap();
let file = write(&sub, "file.txt", "a\nb\nc\nd\n");
let mut resolver = ConfigResolver::new(None, "linecheck.yml");
let cfg = resolver.resolve(&file);
let r = check_file(
&file,
cfg.as_ref(),
&CheckOptions {
max_lines: None,
fallback_warn: None,
fallback_error: None,
},
)
.unwrap();
assert_eq!(r.status, Status::Warn);
}
#[test]
fn nested_config_overrides_parent() {
let dir = TempDir::new().unwrap();
fs::write(
dir.path().join("linecheck.yml"),
"rules:\n - pattern: \"**/*.txt\"\n warn: 100\n error: 200\n",
)
.unwrap();
let sub = dir.path().join("sub");
fs::create_dir(&sub).unwrap();
fs::write(
sub.join("linecheck.yml"),
"rules:\n - pattern: \"**/*.txt\"\n warn: 2\n error: 5\n",
)
.unwrap();
let file = write(&sub, "file.txt", "a\nb\nc\n");
let mut resolver = ConfigResolver::new(None, "linecheck.yml");
let cfg = resolver.resolve(&file);
let r = check_file(
&file,
cfg.as_ref(),
&CheckOptions {
max_lines: None,
fallback_warn: None,
fallback_error: None,
},
)
.unwrap();
assert_eq!(r.status, Status::Warn);
assert_eq!(r.warn_limit, Some(2)); }