(&self, path: &str, version: &str)
| 83 | } |
| 84 | |
| 85 | pub fn save_csv(&self, path: &str, version: &str) -> Result<()> { |
| 86 | use std::fs::OpenOptions; |
| 87 | use std::io::Write; |
| 88 | |
| 89 | let mut file = OpenOptions::new().create(true).append(true).read(true).open(path)?; |
| 90 | let last_line = BufReader::new(&file).lines().last().transpose()?; |
| 91 | |
| 92 | if let Some(last) = last_line |
| 93 | && last.starts_with(version) |
| 94 | { |
| 95 | let len_to_truncate = last.len() as i64; |
| 96 | file.set_len(file.metadata()?.len() - len_to_truncate as u64 - 1)?; |
| 97 | } |
| 98 | |
| 99 | file.seek(SeekFrom::End(0))?; |
| 100 | |
| 101 | let mut passed = 0; |
| 102 | let mut failed = 0; |
| 103 | let mut groups = Vec::new(); |
| 104 | |
| 105 | for group in self.runner.group_results() { |
| 106 | passed += group.passed; |
| 107 | failed += group.failed; |
| 108 | groups.push(TestGroupResult { name: group.name, passed: group.passed, failed: group.failed }); |
| 109 | } |
| 110 | |
| 111 | let groups = serde_json::to_string(&groups)?; |
| 112 | let line = format!("{version},{passed},{failed},{groups}\n"); |
| 113 | file.write_all(line.as_bytes())?; |
| 114 | Ok(()) |
| 115 | } |
| 116 | |
| 117 | fn group_results(&self) -> Vec<GroupResult> { |
| 118 | self.runner.group_results() |
no test coverage detected