use super::*;
mod tests {
use super::*;
#[test]
fn test_polyglot_analyzer_creation() {
let analyzer = PolyglotAnalyzer::new();
assert!(!analyzer.language_patterns.is_empty());
assert!(!analyzer.architecture_signatures.is_empty());
}
#[test]
fn test_language_pattern_initialization() {
let analyzer = PolyglotAnalyzer::new();
let rust_pattern = analyzer.language_patterns.get("rust").unwrap();
assert!(rust_pattern.file_extensions.contains(&".rs".to_string()));
assert!(rust_pattern
._build_files
.contains(&"Cargo.toml".to_string()));
}
#[test]
fn test_has_potential_integration() {
let analyzer = PolyglotAnalyzer::new();
assert!(analyzer.has_potential_integration("rust", "python"));
assert!(analyzer.has_potential_integration("typescript", "javascript"));
assert!(!analyzer.has_potential_integration("rust", "rust"));
}
#[test]
fn test_dependency_type_inference() {
let analyzer = PolyglotAnalyzer::new();
let dep_type = analyzer.infer_dependency_type("rust", "python");
assert!(matches!(dep_type, DependencyType::FFI));
}
#[test]
fn test_risk_level_assessment() {
let analyzer = PolyglotAnalyzer::new();
assert!(matches!(
analyzer.assess_risk_level(0.9),
RiskLevel::Critical
));
assert!(matches!(analyzer.assess_risk_level(0.7), RiskLevel::High));
assert!(matches!(analyzer.assess_risk_level(0.5), RiskLevel::Medium));
assert!(matches!(analyzer.assess_risk_level(0.2), RiskLevel::Low));
}
#[test]
fn test_complexity_score_calculation() {
let analyzer = PolyglotAnalyzer::new();
let language_info = LanguageInfo {
name: "rust".to_string(),
file_count: 10,
line_count: 1000,
frameworks: vec![],
};
let score = analyzer.calculate_language_complexity_score(&language_info);
assert!((1.0..=10.0).contains(&score));
}
#[test]
fn test_integration_point_mapping() {
let analyzer = PolyglotAnalyzer::new();
let integration_type = analyzer.map_dependency_to_integration(&DependencyType::FFI);
assert!(matches!(integration_type, IntegrationType::Memory));
}
#[test]
fn test_recommendation_score_calculation() {
let analyzer = PolyglotAnalyzer::new();
let language_stats = vec![LanguageStats {
language: "rust".to_string(),
file_count: 10,
line_count: 2000,
complexity_score: 5.0,
test_coverage: 0.8,
primary_frameworks: vec![],
}];
let score = analyzer.calculate_recommendation_score(
&language_stats,
&[],
&Some(ArchitecturePattern::Monolithic),
);
assert!((0.0..=1.0).contains(&score));
}
#[test]
fn test_polyglot_insights_generation() {
let analyzer = PolyglotAnalyzer::new();
let analysis = PolyglotAnalysis {
languages: vec![
LanguageStats {
language: "rust".to_string(),
file_count: 5,
line_count: 1000,
complexity_score: 5.0,
test_coverage: 0.8,
primary_frameworks: vec![],
},
LanguageStats {
language: "python".to_string(),
file_count: 3,
line_count: 500,
complexity_score: 3.0,
test_coverage: 0.7,
primary_frameworks: vec![],
},
LanguageStats {
language: "typescript".to_string(),
file_count: 2,
line_count: 300,
complexity_score: 4.0,
test_coverage: 0.6,
primary_frameworks: vec![],
},
],
cross_language_dependencies: vec![],
architecture_pattern: Some(ArchitecturePattern::Mixed),
integration_points: vec![],
recommendation_score: 0.8,
};
let insights = analyzer.generate_polyglot_insights(&analysis);
assert!(!insights.is_empty());
assert!(insights.iter().any(|i| i.contains("polyglot project")));
assert!(insights
.iter()
.any(|i| i.contains("Primary language: rust")));
}
}
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);
}
}
}
#[cfg(feature = "broken-tests")]
#[path = "polyglot_analyzer_coverage_tests.rs"]
mod coverage_tests;
#[cfg(feature = "broken-tests")]
#[path = "polyglot_analyzer_coverage_tests2.rs"]
mod coverage_tests2;