| #[macro_use] extern crate log; | 
 | extern crate env_logger; | 
 |  | 
 | use std::process; | 
 | use std::fmt; | 
 | use std::env; | 
 | use std::str; | 
 |  | 
 | struct Foo; | 
 |  | 
 | impl fmt::Display for Foo { | 
 |     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | 
 |         info!("test"); | 
 |         f.write_str("bar") | 
 |     } | 
 | } | 
 |  | 
 | fn main() { | 
 |     env_logger::init(); | 
 |     if env::var("YOU_ARE_TESTING_NOW").is_ok() { | 
 |         return info!("{}", Foo); | 
 |     } | 
 |  | 
 |     let exe = env::current_exe().unwrap(); | 
 |     let out = process::Command::new(exe) | 
 |         .env("YOU_ARE_TESTING_NOW", "1") | 
 |         .env("RUST_LOG", "debug") | 
 |         .output() | 
 |         .unwrap_or_else(|e| panic!("Unable to start child process: {}", e)); | 
 |     if out.status.success() { | 
 |         return | 
 |     } | 
 |  | 
 |     println!("test failed: {}", out.status); | 
 |     println!("--- stdout\n{}", str::from_utf8(&out.stdout).unwrap()); | 
 |     println!("--- stderr\n{}", str::from_utf8(&out.stderr).unwrap()); | 
 |     process::exit(1); | 
 | } |