8
8
9
9
use std:: env;
10
10
use std:: ffi:: OsStr ;
11
+ use std:: fmt:: Write ;
11
12
use std:: fs;
12
13
use std:: os;
13
14
use std:: path:: { Path , PathBuf } ;
@@ -27,11 +28,26 @@ macro_rules! t {
27
28
( $e: expr) => {
28
29
match $e {
29
30
Ok ( e) => e,
30
- Err ( e) => panic !( "{} failed with {}" , stringify!( $e) , e) ,
31
+ Err ( e) => $crate :: panic_error ( & format !( "failed running {}" , stringify!( $e) ) , e) ,
31
32
}
32
33
} ;
33
34
}
34
35
36
+ #[ track_caller]
37
+ pub fn panic_error ( what : & str , err : impl Into < anyhow:: Error > ) -> ! {
38
+ let err = err. into ( ) ;
39
+ pe ( what, err) ;
40
+ #[ track_caller]
41
+ fn pe ( what : & str , err : anyhow:: Error ) -> ! {
42
+ let mut result = format ! ( "{}\n error: {}" , what, err) ;
43
+ for cause in err. chain ( ) . skip ( 1 ) {
44
+ drop ( writeln ! ( result, "\n Caused by:" ) ) ;
45
+ drop ( write ! ( result, "{}" , cause) ) ;
46
+ }
47
+ panic ! ( "\n {}" , result) ;
48
+ }
49
+ }
50
+
35
51
pub use cargo_test_macro:: cargo_test;
36
52
37
53
pub mod cross_compile;
@@ -737,7 +753,7 @@ impl Execs {
737
753
self . ran = true ;
738
754
let p = ( & self . process_builder ) . clone ( ) . unwrap ( ) ;
739
755
if let Err ( e) = self . match_process ( & p) {
740
- panic ! ( "\n {}" , e )
756
+ panic_error ( & format ! ( "test failed running {}" , p ) , e ) ;
741
757
}
742
758
}
743
759
@@ -748,7 +764,7 @@ impl Execs {
748
764
self . ran = true ;
749
765
let p = ( & self . process_builder ) . clone ( ) . unwrap ( ) ;
750
766
match self . match_process ( & p) {
751
- Err ( e) => panic ! ( "\n {}" , e) ,
767
+ Err ( e) => panic_error ( & format ! ( "test failed running {}" , p ) , e) ,
752
768
Ok ( output) => serde_json:: from_slice ( & output. stdout ) . unwrap_or_else ( |e| {
753
769
panic ! (
754
770
"\n failed to parse JSON: {}\n \
@@ -764,7 +780,7 @@ impl Execs {
764
780
pub fn run_output ( & mut self , output : & Output ) {
765
781
self . ran = true ;
766
782
if let Err ( e) = self . match_output ( output) {
767
- panic ! ( " \n {} ", e)
783
+ panic_error ( "process did not return the expected result ", e)
768
784
}
769
785
}
770
786
@@ -858,9 +874,10 @@ impl Execs {
858
874
match self . expect_exit_code {
859
875
None => Ok ( ( ) ) ,
860
876
Some ( expected) if code == Some ( expected) => Ok ( ( ) ) ,
861
- Some ( _) => bail ! (
862
- "exited with {:?}\n --- stdout\n {}\n --- stderr\n {}" ,
863
- code,
877
+ Some ( expected) => bail ! (
878
+ "process exited with code {} (expected {})\n --- stdout\n {}\n --- stderr\n {}" ,
879
+ code. unwrap_or( -1 ) ,
880
+ expected,
864
881
String :: from_utf8_lossy( stdout) ,
865
882
String :: from_utf8_lossy( stderr)
866
883
) ,
0 commit comments