use super::*;
#[test]
fn test_all_watchers_have_valid_info() {
let registry = default_registry();
let watchers = registry.all_watchers();
assert!(
!watchers.is_empty(),
"Default registry should have watchers"
);
for watcher in watchers {
let info = watcher.info();
assert!(!info.name.is_empty(), "Watcher name should not be empty");
assert!(
!info.description.is_empty(),
"Watcher {} description should not be empty",
info.name
);
}
}
#[test]
fn test_all_watchers_have_unique_names() {
let registry = default_registry();
let watchers = registry.all_watchers();
let mut names: Vec<&str> = watchers.iter().map(|w| w.info().name).collect();
let original_count = names.len();
names.sort();
names.dedup();
assert_eq!(
names.len(),
original_count,
"Watcher names should be unique"
);
}
#[test]
fn test_all_watchers_find_sources_handles_missing_dirs() {
let registry = default_registry();
let watchers = registry.all_watchers();
for watcher in watchers {
let info = watcher.info();
let result = watcher.find_sources();
assert!(
result.is_ok(),
"Watcher {} find_sources should not error when directory is missing: {:?}",
info.name,
result.err()
);
}
}
#[test]
fn test_all_watchers_watch_paths_are_valid() {
let registry = default_registry();
let watchers = registry.all_watchers();
for watcher in watchers {
let info = watcher.info();
let paths = watcher.watch_paths();
for path in &paths {
assert!(
!path.as_os_str().is_empty(),
"Watcher {} returned empty path in watch_paths",
info.name
);
}
}
}
#[test]
fn test_all_watchers_is_available_does_not_panic() {
let registry = default_registry();
let watchers = registry.all_watchers();
for watcher in watchers {
let _ = watcher.is_available();
}
}
#[test]
fn test_default_registry_contains_expected_watchers() {
let registry = default_registry();
let expected_watchers = [
"aider",
"amp",
"claude-code",
"cline",
"codex",
"continue",
"gemini",
"kilo-code",
"opencode",
"roo-code",
];
for name in &expected_watchers {
assert!(
registry.get_watcher(name).is_some(),
"Expected watcher '{}' not found in default registry",
name
);
}
}