@@ -310,11 +310,26 @@ fn run(
310310 }
311311
312312 impl RunningTest {
313- fn join ( self , event : & mut notify:: event:: CaseComplete ) {
314- if self . join_handle . join ( ) . is_err ( ) && event. status . is_none ( ) {
315- event. status = Some ( notify:: RunStatus :: Failed ) ;
316- event. message = Some ( "panicked after reporting success" . to_owned ( ) ) ;
313+ fn join (
314+ self ,
315+ start : & std:: time:: Instant ,
316+ event : & notify:: event:: CaseComplete ,
317+ notifier : & mut dyn notify:: Notifier ,
318+ ) -> std:: io:: Result < ( ) > {
319+ if self . join_handle . join ( ) . is_err ( ) {
320+ let status = notify:: RunStatus :: Failed ;
321+ let message = Some ( "panicked after reporting success" . to_owned ( ) ) ;
322+ notifier. notify (
323+ notify:: event:: CaseMessage {
324+ name : event. name . clone ( ) ,
325+ status,
326+ message,
327+ elapsed_s : Some ( notify:: Elapsed ( start. elapsed ( ) ) ) ,
328+ }
329+ . into ( ) ,
330+ ) ?;
317331 }
332+ Ok ( ( ) )
318333 }
319334 }
320335
@@ -379,10 +394,10 @@ fn run(
379394 }
380395 }
381396
382- let mut event = rx. recv ( ) . unwrap ( ) ;
383- if let notify:: Event :: CaseComplete ( event) = & mut event {
397+ let event = rx. recv ( ) . unwrap ( ) ;
398+ if let notify:: Event :: CaseComplete ( event) = & event {
384399 let running_test = running_tests. remove ( & event. name ) . unwrap ( ) ;
385- running_test. join ( event) ;
400+ running_test. join ( start , event, notifier ) ? ;
386401 pending -= 1 ;
387402 }
388403 notifier. notify ( event) ?;
@@ -446,20 +461,31 @@ fn run_case(
446461 Err ( RunError :: fail ( msg) )
447462 } ) ;
448463
449- let err = outcome. as_ref ( ) . err ( ) ;
450- let status = err. map ( |e| e. status ( ) ) ;
451- let message = err. and_then ( |e| e. cause ( ) . map ( |c| c. to_string ( ) ) ) ;
464+ let mut case_status = None ;
465+ if let Some ( err) = outcome. as_ref ( ) . err ( ) {
466+ let status = err. status ( ) ;
467+ case_status = Some ( status) ;
468+ let message = err. cause ( ) . map ( |c| c. to_string ( ) ) ;
469+ notifier. notify (
470+ notify:: event:: CaseMessage {
471+ name : case. name ( ) . to_owned ( ) ,
472+ status,
473+ message,
474+ elapsed_s : Some ( notify:: Elapsed ( start. elapsed ( ) ) ) ,
475+ }
476+ . into ( ) ,
477+ ) ?;
478+ }
479+
452480 notifier. notify (
453481 notify:: event:: CaseComplete {
454482 name : case. name ( ) . to_owned ( ) ,
455- status,
456- message,
457483 elapsed_s : Some ( notify:: Elapsed ( start. elapsed ( ) ) ) ,
458484 }
459485 . into ( ) ,
460486 ) ?;
461487
462- Ok ( status != Some ( notify:: RunStatus :: Failed ) )
488+ Ok ( case_status != Some ( notify:: RunStatus :: Failed ) )
463489}
464490
465491/// Fixed frame used to clean the backtrace with `RUST_BACKTRACE=1`.
0 commit comments