use anyhow::Result;
#[derive(Debug)]
struct SymbolTableAnalysis {
#[allow(dead_code)] symbols: Vec<Symbol>,
total_symbols: usize,
}
#[derive(Debug)]
struct Symbol {
#[allow(dead_code)] name: String,
#[allow(dead_code)] kind: String,
#[allow(dead_code)] location: String,
}
#[derive(Debug)]
enum OutputFormat {
Json,
Human,
Markdown,
}
fn format_output_mock(analysis: &SymbolTableAnalysis, format: OutputFormat) -> Result<String> {
match format {
OutputFormat::Json => Ok(format!(
r#"{{"total_symbols": {}}}"#,
analysis.total_symbols
)),
OutputFormat::Human => Ok(format!("Total symbols: {}", analysis.total_symbols)),
OutputFormat::Markdown => Ok(format!("# Symbol Table\nTotal: {}", analysis.total_symbols)),
}
}
#[test]
fn test_format_output_json() -> Result<()> {
let analysis = SymbolTableAnalysis {
symbols: vec![],
total_symbols: 42,
};
let output = format_output_mock(&analysis, OutputFormat::Json)?;
assert!(output.contains("\"total_symbols\""));
assert!(output.contains("42"));
Ok(())
}
#[test]
fn test_format_output_human() -> Result<()> {
let analysis = SymbolTableAnalysis {
symbols: vec![],
total_symbols: 10,
};
let output = format_output_mock(&analysis, OutputFormat::Human)?;
assert!(output.contains("Total symbols"));
assert!(output.contains("10"));
Ok(())
}
#[test]
fn test_format_output_markdown() -> Result<()> {
let analysis = SymbolTableAnalysis {
symbols: vec![],
total_symbols: 5,
};
let output = format_output_mock(&analysis, OutputFormat::Markdown)?;
assert!(output.contains("# Symbol Table"));
assert!(output.contains("5"));
Ok(())
}