ruchy/notebook/testing/
report.rs

1/// Test report generation for notebook testing framework
2#[derive(Debug, Clone)]
3pub struct TestReport {
4    pub total_tests: usize,
5    pub passed_tests: usize,
6    pub failed_tests: usize,
7    pub coverage_percentage: f64,
8}
9
10impl TestReport {
11    /// Create a new test report
12    /// # Examples
13    ///
14    /// ```
15    /// use ruchy::notebook::testing::report::TestReport;
16    ///
17    /// let report = TestReport::new(100, 95, 5, 80.5);
18    /// assert_eq!(report.total_tests, 100);
19    /// ```
20    pub fn new(total: usize, passed: usize, failed: usize, coverage: f64) -> Self {
21        Self {
22            total_tests: total,
23            passed_tests: passed,
24            failed_tests: failed,
25            coverage_percentage: coverage,
26        }
27    }
28
29    /// Get success rate
30    /// # Examples
31    ///
32    /// ```
33    /// use ruchy::notebook::testing::report::TestReport;
34    ///
35    /// let report = TestReport::new(100, 95, 5, 80.5);
36    /// assert_eq!(report.success_rate(), 0.95);
37    /// ```
38    pub fn success_rate(&self) -> f64 {
39        if self.total_tests == 0 {
40            0.0
41        } else {
42            self.passed_tests as f64 / self.total_tests as f64
43        }
44    }
45}
46
47#[cfg(test)]
48mod tests {
49    use super::*;
50
51    // EXTREME TDD: Comprehensive test coverage for test report system
52
53    #[test]
54    fn test_test_report_new() {
55        let report = TestReport::new(100, 85, 15, 75.5);
56        assert_eq!(report.total_tests, 100);
57        assert_eq!(report.passed_tests, 85);
58        assert_eq!(report.failed_tests, 15);
59        assert_eq!(report.coverage_percentage, 75.5);
60    }
61
62    #[test]
63    fn test_test_report_clone() {
64        let report = TestReport::new(50, 40, 10, 60.0);
65        let cloned = report;
66
67        assert_eq!(cloned.total_tests, 50);
68        assert_eq!(cloned.passed_tests, 40);
69        assert_eq!(cloned.failed_tests, 10);
70        assert_eq!(cloned.coverage_percentage, 60.0);
71    }
72
73    #[test]
74    fn test_success_rate_normal() {
75        let report = TestReport::new(100, 85, 15, 75.0);
76        assert_eq!(report.success_rate(), 0.85);
77    }
78
79    #[test]
80    fn test_success_rate_perfect() {
81        let report = TestReport::new(100, 100, 0, 100.0);
82        assert_eq!(report.success_rate(), 1.0);
83    }
84
85    #[test]
86    fn test_success_rate_zero_tests() {
87        let report = TestReport::new(0, 0, 0, 0.0);
88        assert_eq!(report.success_rate(), 0.0);
89    }
90
91    #[test]
92    fn test_success_rate_all_failed() {
93        let report = TestReport::new(50, 0, 50, 25.0);
94        assert_eq!(report.success_rate(), 0.0);
95    }
96
97    #[test]
98    fn test_debug_format() {
99        let report = TestReport::new(10, 8, 2, 80.0);
100        let debug_str = format!("{report:?}");
101        assert!(debug_str.contains("total_tests: 10"));
102        assert!(debug_str.contains("passed_tests: 8"));
103        assert!(debug_str.contains("failed_tests: 2"));
104        assert!(debug_str.contains("coverage_percentage: 80"));
105    }
106}