#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_detect_visibility() {
assert!(matches!(
detect_visibility("pub fn test()"),
Visibility::Public
));
assert!(matches!(
detect_visibility("private fn test()"),
Visibility::Private
));
assert!(matches!(
detect_visibility("fn test()"),
Visibility::Internal
));
}
#[test]
fn test_is_source_file() {
assert!(is_source_file(Path::new("test.rs")));
assert!(is_source_file(Path::new("test.js")));
assert!(!is_source_file(Path::new("test.txt")));
}
#[test]
fn test_extract_symbols_simple() {
let content = "pub fn test_function() {}\nstruct TestStruct {}";
let symbols = extract_symbols_simple(content, "test.rs").unwrap();
assert_eq!(symbols.len(), 2);
assert_eq!(symbols[0].name, "test_function");
assert_eq!(symbols[1].name, "TestStruct");
}
#[tokio::test]
async fn test_symbol_table_creation() {
let table = SymbolTable {
symbols: vec![Symbol {
name: "test".to_string(),
kind: SymbolKind::Function,
file: "test.rs".to_string(),
line: 1,
column: 0,
visibility: Visibility::Public,
references: vec![],
}],
total_symbols: 1,
unreferenced_symbols: vec!["test".to_string()],
most_referenced: vec![],
};
assert_eq!(table.total_symbols, 1);
assert_eq!(table.unreferenced_symbols.len(), 1);
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod property_tests {
use proptest::prelude::*;
proptest! {
#[test]
fn basic_property_stability(_input in ".*") {
prop_assert!(true);
}
#[test]
fn module_consistency_check(_x in 0u32..1000) {
prop_assert!(_x < 1001);
}
}
}