code complexity & repetition analysis tool
1pub mod lcov;
2pub mod misses;
3pub mod model;
4pub mod paths;
5
6pub use lcov::parse_lcov_content;
7pub use lcov::parse_lcov_file;
8pub use model::{CoverageReport, CoverageSummary, FileCoverage};
9
10use crate::Result;
11
12pub fn parse_coverage_from_file(path: &std::path::Path, repo_root: Option<&std::path::Path>) -> Result<CoverageReport> {
13 let files = lcov::parse_lcov_file(path, repo_root)?;
14 Ok(CoverageReport::new(files))
15}
16
17pub fn parse_coverage_from_content(content: &str, repo_root: Option<&std::path::Path>) -> Result<CoverageReport> {
18 let files = lcov::parse_lcov_content(content, repo_root)?;
19 Ok(CoverageReport::new(files))
20}
21
22#[cfg(test)]
23mod tests {
24 use super::*;
25
26 #[test]
27 fn test_parse_coverage_from_content() {
28 let lcov = r#"SF:test.rs
29DA:1,10
30DA:2,0
31DA:3,5
32end_of_record
33"#;
34
35 let report = parse_coverage_from_content(lcov, None).unwrap();
36 assert_eq!(report.files.len(), 1);
37 assert_eq!(report.totals.total, 3);
38 assert_eq!(report.totals.hit, 2);
39 assert_eq!(report.totals.miss, 1);
40 }
41
42 #[test]
43 fn test_parse_coverage_multiple_files() {
44 let lcov = r#"SF:test1.rs
45DA:1,10
46DA:2,0
47end_of_record
48SF:test2.rs
49DA:1,5
50DA:2,5
51end_of_record
52"#;
53
54 let report = parse_coverage_from_content(lcov, None).unwrap();
55 assert_eq!(report.files.len(), 2);
56 assert_eq!(report.totals.total, 4);
57 assert_eq!(report.totals.hit, 3);
58 assert_eq!(report.totals.miss, 1);
59 }
60}