@@ -9,6 +9,7 @@ pub enum Event {
99 DiscoverComplete ( DiscoverComplete ) ,
1010 RunStart ( RunStart ) ,
1111 CaseStart ( CaseStart ) ,
12+ CaseMessage ( CaseMessage ) ,
1213 CaseComplete ( CaseComplete ) ,
1314 RunComplete ( RunComplete ) ,
1415}
@@ -22,6 +23,7 @@ impl Event {
2223 Self :: DiscoverComplete ( event) => event. to_jsonline ( ) ,
2324 Self :: RunStart ( event) => event. to_jsonline ( ) ,
2425 Self :: CaseStart ( event) => event. to_jsonline ( ) ,
26+ Self :: CaseMessage ( event) => event. to_jsonline ( ) ,
2527 Self :: CaseComplete ( event) => event. to_jsonline ( ) ,
2628 Self :: RunComplete ( event) => event. to_jsonline ( ) ,
2729 }
@@ -58,6 +60,12 @@ impl From<CaseStart> for Event {
5860 }
5961}
6062
63+ impl From < CaseMessage > for Event {
64+ fn from ( inner : CaseMessage ) -> Self {
65+ Self :: CaseMessage ( inner)
66+ }
67+ }
68+
6169impl From < CaseComplete > for Event {
6270 fn from ( inner : CaseComplete ) -> Self {
6371 Self :: CaseComplete ( inner)
@@ -296,14 +304,9 @@ impl CaseStart {
296304#[ cfg_attr( feature = "unstable-schema" , derive( schemars:: JsonSchema ) ) ]
297305#[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
298306#[ cfg_attr( feature = "serde" , serde( rename_all = "snake_case" ) ) ]
299- pub struct CaseComplete {
307+ pub struct CaseMessage {
300308 pub name : String ,
301- /// `None` means success
302- #[ cfg_attr(
303- feature = "serde" ,
304- serde( default , skip_serializing_if = "Option::is_none" )
305- ) ]
306- pub status : Option < RunStatus > ,
309+ pub kind : MessageKind ,
307310 #[ cfg_attr(
308311 feature = "serde" ,
309312 serde( default , skip_serializing_if = "Option::is_none" )
@@ -316,7 +319,7 @@ pub struct CaseComplete {
316319 pub elapsed_s : Option < Elapsed > ,
317320}
318321
319- impl CaseComplete {
322+ impl CaseMessage {
320323 #[ cfg( feature = "json" ) ]
321324 pub fn to_jsonline ( & self ) -> String {
322325 use json_write:: JsonWrite as _;
@@ -326,19 +329,17 @@ impl CaseComplete {
326329
327330 buffer. key ( "event" ) . unwrap ( ) ;
328331 buffer. keyval_sep ( ) . unwrap ( ) ;
329- buffer. value ( "case_complete " ) . unwrap ( ) ;
332+ buffer. value ( "case_message " ) . unwrap ( ) ;
330333
331334 buffer. val_sep ( ) . unwrap ( ) ;
332335 buffer. key ( "name" ) . unwrap ( ) ;
333336 buffer. keyval_sep ( ) . unwrap ( ) ;
334337 buffer. value ( & self . name ) . unwrap ( ) ;
335338
336- if let Some ( status) = self . status {
337- buffer. val_sep ( ) . unwrap ( ) ;
338- buffer. key ( "status" ) . unwrap ( ) ;
339- buffer. keyval_sep ( ) . unwrap ( ) ;
340- buffer. value ( status. as_str ( ) ) . unwrap ( ) ;
341- }
339+ buffer. val_sep ( ) . unwrap ( ) ;
340+ buffer. key ( "kind" ) . unwrap ( ) ;
341+ buffer. keyval_sep ( ) . unwrap ( ) ;
342+ buffer. value ( self . kind . as_str ( ) ) . unwrap ( ) ;
342343
343344 if let Some ( message) = & self . message {
344345 buffer. val_sep ( ) . unwrap ( ) ;
@@ -360,6 +361,49 @@ impl CaseComplete {
360361 }
361362}
362363
364+ #[ derive( Clone , Debug ) ]
365+ #[ cfg_attr( feature = "unstable-schema" , derive( schemars:: JsonSchema ) ) ]
366+ #[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
367+ #[ cfg_attr( feature = "serde" , serde( rename_all = "snake_case" ) ) ]
368+ pub struct CaseComplete {
369+ pub name : String ,
370+ #[ cfg_attr(
371+ feature = "serde" ,
372+ serde( default , skip_serializing_if = "Option::is_none" )
373+ ) ]
374+ pub elapsed_s : Option < Elapsed > ,
375+ }
376+
377+ impl CaseComplete {
378+ #[ cfg( feature = "json" ) ]
379+ pub fn to_jsonline ( & self ) -> String {
380+ use json_write:: JsonWrite as _;
381+
382+ let mut buffer = String :: new ( ) ;
383+ buffer. open_object ( ) . unwrap ( ) ;
384+
385+ buffer. key ( "event" ) . unwrap ( ) ;
386+ buffer. keyval_sep ( ) . unwrap ( ) ;
387+ buffer. value ( "case_complete" ) . unwrap ( ) ;
388+
389+ buffer. val_sep ( ) . unwrap ( ) ;
390+ buffer. key ( "name" ) . unwrap ( ) ;
391+ buffer. keyval_sep ( ) . unwrap ( ) ;
392+ buffer. value ( & self . name ) . unwrap ( ) ;
393+
394+ if let Some ( elapsed_s) = self . elapsed_s {
395+ buffer. val_sep ( ) . unwrap ( ) ;
396+ buffer. key ( "elapsed_s" ) . unwrap ( ) ;
397+ buffer. keyval_sep ( ) . unwrap ( ) ;
398+ buffer. value ( String :: from ( elapsed_s) ) . unwrap ( ) ;
399+ }
400+
401+ buffer. close_object ( ) . unwrap ( ) ;
402+
403+ buffer
404+ }
405+ }
406+
363407#[ derive( Clone , Debug ) ]
364408#[ cfg_attr( feature = "unstable-schema" , derive( schemars:: JsonSchema ) ) ]
365409#[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
@@ -397,10 +441,12 @@ impl RunComplete {
397441 }
398442}
399443
444+ #[ cfg( feature = "serde" ) ]
400445fn true_default ( ) -> bool {
401446 true
402447}
403448
449+ #[ cfg( feature = "serde" ) ]
404450fn is_true ( yes : & bool ) -> bool {
405451 * yes
406452}
@@ -423,25 +469,27 @@ impl RunMode {
423469 }
424470 }
425471
472+ #[ cfg( any( feature = "serde" , feature = "json" ) ) ]
426473 fn is_default ( & self ) -> bool {
427474 * self == Default :: default ( )
428475 }
429476}
430477
431- #[ derive( Copy , Clone , Debug , PartialEq , Eq ) ]
478+ #[ derive( Copy , Clone , Debug , PartialEq , Eq , PartialOrd , Ord ) ]
432479#[ cfg_attr( feature = "unstable-schema" , derive( schemars:: JsonSchema ) ) ]
433480#[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
434481#[ cfg_attr( feature = "serde" , serde( rename_all = "snake_case" ) ) ]
435- pub enum RunStatus {
482+ pub enum MessageKind {
483+ // Highest precedent items for determining test status last
484+ Error ,
436485 Ignored ,
437- Failed ,
438486}
439487
440- impl RunStatus {
488+ impl MessageKind {
441489 pub fn as_str ( & self ) -> & str {
442490 match self {
491+ Self :: Error => "error" ,
443492 Self :: Ignored => "ignored" ,
444- Self :: Failed => "failed" ,
445493 }
446494 }
447495}
0 commit comments