• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use std::{io, io::prelude::Write};
2 
3 use crate::{
4     console::{ConsoleTestDiscoveryState, ConsoleTestState},
5     test_result::TestResult,
6     time,
7     types::{TestDesc, TestName},
8 };
9 
10 mod json;
11 mod junit;
12 mod pretty;
13 mod terse;
14 
15 pub(crate) use self::json::JsonFormatter;
16 pub(crate) use self::junit::JunitFormatter;
17 pub(crate) use self::pretty::PrettyFormatter;
18 pub(crate) use self::terse::TerseFormatter;
19 
20 pub(crate) trait OutputFormatter {
write_discovery_start(&mut self) -> io::Result<()>21     fn write_discovery_start(&mut self) -> io::Result<()>;
write_test_discovered(&mut self, desc: &TestDesc, test_type: &str) -> io::Result<()>22     fn write_test_discovered(&mut self, desc: &TestDesc, test_type: &str) -> io::Result<()>;
write_discovery_finish(&mut self, state: &ConsoleTestDiscoveryState) -> io::Result<()>23     fn write_discovery_finish(&mut self, state: &ConsoleTestDiscoveryState) -> io::Result<()>;
24 
write_run_start(&mut self, test_count: usize, shuffle_seed: Option<u64>) -> io::Result<()>25     fn write_run_start(&mut self, test_count: usize, shuffle_seed: Option<u64>) -> io::Result<()>;
write_test_start(&mut self, desc: &TestDesc) -> io::Result<()>26     fn write_test_start(&mut self, desc: &TestDesc) -> io::Result<()>;
write_timeout(&mut self, desc: &TestDesc) -> io::Result<()>27     fn write_timeout(&mut self, desc: &TestDesc) -> io::Result<()>;
write_result( &mut self, desc: &TestDesc, result: &TestResult, exec_time: Option<&time::TestExecTime>, stdout: &[u8], state: &ConsoleTestState, ) -> io::Result<()>28     fn write_result(
29         &mut self,
30         desc: &TestDesc,
31         result: &TestResult,
32         exec_time: Option<&time::TestExecTime>,
33         stdout: &[u8],
34         state: &ConsoleTestState,
35     ) -> io::Result<()>;
write_run_finish(&mut self, state: &ConsoleTestState) -> io::Result<bool>36     fn write_run_finish(&mut self, state: &ConsoleTestState) -> io::Result<bool>;
37 }
38 
write_stderr_delimiter(test_output: &mut Vec<u8>, test_name: &TestName)39 pub(crate) fn write_stderr_delimiter(test_output: &mut Vec<u8>, test_name: &TestName) {
40     match test_output.last() {
41         Some(b'\n') => (),
42         Some(_) => test_output.push(b'\n'),
43         None => (),
44     }
45     writeln!(test_output, "---- {test_name} stderr ----").unwrap();
46 }
47