1+ use super :: event:: CaseComplete ;
12use super :: Event ;
23use super :: RunStatus ;
34use super :: FAILED ;
45use super :: OK ;
56
67#[ derive( Default , Clone , Debug ) ]
78pub ( crate ) struct Summary {
8- pub ( crate ) failures : std:: collections:: BTreeMap < String , Option < String > > ,
9- pub ( crate ) elapsed_s : Option < super :: Elapsed > ,
10-
11- pub ( crate ) num_run : usize ,
9+ num_run : usize ,
1210 /// Number of tests and benchmarks that were filtered out (either by the
1311 /// filter-in pattern or by `--skip` arguments).
14- pub ( crate ) num_filtered_out : usize ,
12+ num_filtered_out : usize ,
1513
16- /// Number of passed tests.
17- pub ( crate ) num_passed : usize ,
18- /// Number of failed tests and benchmarks.
19- pub ( crate ) num_failed : usize ,
20- /// Number of ignored tests and benchmarks.
21- pub ( crate ) num_ignored : usize ,
14+ status : std:: collections:: HashMap < String , CaseComplete > ,
15+ elapsed_s : Option < super :: Elapsed > ,
2216}
2317
2418impl Summary {
25- pub ( crate ) fn has_failed ( & self ) -> bool {
26- 0 < self . num_failed
19+ pub ( crate ) fn get_status ( & self , name : & str ) -> Option < RunStatus > {
20+ let event = self . status . get ( name) ?;
21+ event. status
2722 }
2823
2924 pub ( crate ) fn write_start ( & self , writer : & mut dyn std:: io:: Write ) -> std:: io:: Result < ( ) > {
@@ -35,24 +30,38 @@ impl Summary {
3530 }
3631
3732 pub ( crate ) fn write_complete ( & self , writer : & mut dyn :: std:: io:: Write ) -> std:: io:: Result < ( ) > {
38- let ( summary, summary_style) = if self . has_failed ( ) {
33+ let mut num_passed = 0 ;
34+ let mut num_failed = 0 ;
35+ let mut num_ignored = 0 ;
36+ let mut failures = std:: collections:: BTreeMap :: new ( ) ;
37+ for event in self . status . values ( ) {
38+ match event. status {
39+ Some ( RunStatus :: Ignored ) => num_ignored += 1 ,
40+ Some ( RunStatus :: Failed ) => {
41+ num_failed += 1 ;
42+ failures. insert ( & event. name , & event. message ) ;
43+ }
44+ None => num_passed += 1 ,
45+ }
46+ }
47+
48+ let has_failed = 0 < num_failed;
49+
50+ let ( summary, summary_style) = if has_failed {
3951 ( "FAILED" , FAILED )
4052 } else {
4153 ( "ok" , OK )
4254 } ;
43- let num_passed = self . num_passed ;
44- let num_failed = self . num_failed ;
45- let num_ignored = self . num_ignored ;
4655 let num_filtered_out = self . num_filtered_out ;
4756 let elapsed_s = self . elapsed_s ;
4857
49- if self . has_failed ( ) {
58+ if has_failed {
5059 writeln ! ( writer) ?;
5160 writeln ! ( writer, "failures:" ) ?;
5261 writeln ! ( writer) ?;
5362
5463 // Print messages of all tests
55- for ( name, msg) in & self . failures {
64+ for ( name, msg) in & failures {
5665 if let Some ( msg) = msg {
5766 writeln ! ( writer, "---- {name} ----" ) ?;
5867 writeln ! ( writer, "{msg}" ) ?;
@@ -63,7 +72,7 @@ impl Summary {
6372 // Print summary list of failed tests
6473 writeln ! ( writer) ?;
6574 writeln ! ( writer, "failures:" ) ?;
66- for name in self . failures . keys ( ) {
75+ for name in failures. keys ( ) {
6776 writeln ! ( writer, " {name}" ) ?;
6877 }
6978 }
@@ -98,18 +107,9 @@ impl super::Notifier for Summary {
98107 Event :: DiscoverComplete ( _) => { }
99108 Event :: RunStart ( _) => { }
100109 Event :: CaseStart ( _) => { }
101- Event :: CaseComplete ( inner) => match inner. status {
102- Some ( RunStatus :: Ignored ) => {
103- self . num_ignored += 1 ;
104- }
105- Some ( RunStatus :: Failed ) => {
106- self . num_failed += 1 ;
107- self . failures . insert ( inner. name , inner. message ) ;
108- }
109- None => {
110- self . num_passed += 1 ;
111- }
112- } ,
110+ Event :: CaseComplete ( inner) => {
111+ self . status . insert ( inner. name . clone ( ) , inner) ;
112+ }
113113 Event :: RunComplete ( inner) => {
114114 self . elapsed_s = inner. elapsed_s ;
115115 }
0 commit comments