Skip to main content

ferrous_forge/test_coverage/
tests.rs

1//! Test coverage module tests
2
3#[cfg(test)]
4#[allow(
5    clippy::unwrap_used,
6    clippy::expect_used,
7    clippy::panic,
8    clippy::module_inception
9)]
10mod tests {
11    use super::super::*;
12    use std::collections::HashMap;
13
14    #[test]
15    fn test_coverage_config_default() {
16        let config = CoverageConfig::default();
17        assert_eq!(config.min_line_coverage, 80.0);
18        assert_eq!(config.min_function_coverage, 85.0);
19        assert_eq!(config.min_branch_coverage, 75.0);
20        assert!(config.fail_on_low_coverage);
21    }
22
23    #[test]
24    fn test_coverage_analyzer_creation() {
25        let analyzer = CoverageAnalyzer::new();
26        assert_eq!(analyzer.config().min_line_coverage, 80.0);
27
28        let custom_config = CoverageConfig {
29            min_line_coverage: 90.0,
30            ..Default::default()
31        };
32        let custom_analyzer = CoverageAnalyzer::with_config(custom_config);
33        assert_eq!(custom_analyzer.config().min_line_coverage, 90.0);
34    }
35
36    #[test]
37    fn test_validate_coverage_success() {
38        let analyzer = CoverageAnalyzer::new();
39        let report = CoverageReport {
40            line_coverage: 85.0,
41            function_coverage: 90.0,
42            branch_coverage: 80.0,
43            file_coverage: HashMap::new(),
44            lines_tested: 85,
45            total_lines: 100,
46            functions_tested: 18,
47            total_functions: 20,
48            branches_tested: 8,
49            total_branches: 10,
50        };
51
52        assert!(analyzer.validate_coverage(&report).is_ok());
53    }
54
55    #[test]
56    fn test_validate_coverage_failure() {
57        let analyzer = CoverageAnalyzer::new();
58        let report = CoverageReport {
59            line_coverage: 70.0, // Below 80% minimum
60            function_coverage: 90.0,
61            branch_coverage: 80.0,
62            file_coverage: HashMap::new(),
63            lines_tested: 70,
64            total_lines: 100,
65            functions_tested: 18,
66            total_functions: 20,
67            branches_tested: 8,
68            total_branches: 10,
69        };
70
71        assert!(analyzer.validate_coverage(&report).is_err());
72    }
73
74    #[test]
75    fn test_format_coverage_report() {
76        let analyzer = CoverageAnalyzer::new();
77        let report = CoverageReport {
78            line_coverage: 85.0,
79            function_coverage: 90.0,
80            branch_coverage: 80.0,
81            file_coverage: HashMap::new(),
82            lines_tested: 85,
83            total_lines: 100,
84            functions_tested: 18,
85            total_functions: 20,
86            branches_tested: 8,
87            total_branches: 10,
88        };
89
90        let formatted = analyzer.format_coverage_report(&report);
91        assert!(formatted.contains("Test Coverage Report"));
92        assert!(formatted.contains("85.0%"));
93        assert!(formatted.contains("90.0%"));
94        assert!(formatted.contains("80.0%"));
95    }
96}