mod common;
use common::analyze_code_snippet;
use debtmap::core::Language;
#[test]
#[ignore = "Demo test - may hang in CI"]
fn test_library_api_demo() {
let rust_code = r#"
fn calculate_total(items: Vec<i32>) -> i32 {
let mut total = 0;
for item in items {
total += item;
}
total
}
fn main() {
// TODO: Implement the main logic
let numbers = vec![1, 2, 3, 4, 5];
let result = calculate_total(numbers);
println!("Total: {}", result);
}
"#;
let metrics = analyze_code_snippet(rust_code, Language::Rust).expect("Failed to analyze code");
println!("Analyzed file: {:?}", metrics.path);
println!("Language: {:?}", metrics.language);
println!(
"Cyclomatic complexity: {}",
metrics.complexity.cyclomatic_complexity
);
println!(
"Cognitive complexity: {}",
metrics.complexity.cognitive_complexity
);
println!("Found {} debt items", metrics.debt_items.len());
let todos = metrics
.debt_items
.iter()
.filter(|item| matches!(item.debt_type, debtmap::core::DebtType::Todo { .. }))
.count();
assert!(todos > 0, "Should have found at least one TODO");
println!("Test completed successfully!");
}
#[test]
#[ignore = "Demo test - may hang in CI"]
fn test_no_subprocess_hanging() {
let codes = vec![
("fn simple() { }", Language::Rust),
("def simple(): pass", Language::Python),
("function simple() {}", Language::Rust),
];
for (code, lang) in codes {
let start = std::time::Instant::now();
let _metrics = analyze_code_snippet(code, lang).expect("Failed to analyze code");
let elapsed = start.elapsed();
println!("Analyzed {} code in {:?}", lang, elapsed);
assert!(
elapsed.as_millis() < 100,
"Analysis should be fast (< 100ms)"
);
}
}