|
1 | 1 | use std::io::Read;
|
2 |
| -use std::ops::Add; |
| 2 | +use std::ops::{Add, Deref}; |
3 | 3 | use std::process::{Child, Command, Output, Stdio};
|
4 | 4 | use std::sync::atomic;
|
5 |
| -use std::{fs, net, thread, time}; |
| 5 | +use std::{fmt, fs, net, thread, time}; |
| 6 | + |
| 7 | +use pretty_assertions::assert_eq; |
6 | 8 |
|
7 | 9 | /* Note:
|
8 | 10 | *
|
@@ -807,17 +809,42 @@ impl Drop for KillOnDrop {
|
807 | 809 | }
|
808 | 810 | }
|
809 | 811 |
|
810 |
| -fn print_output(out: Output) -> Output { |
811 |
| - println!("status: {:?}\n", out.status); |
812 |
| - println!( |
813 |
| - "stdout:\n{}\n", |
814 |
| - String::from_utf8(out.stdout.clone()).unwrap() |
815 |
| - ); |
816 |
| - println!( |
817 |
| - "stderr:\n{}\n", |
818 |
| - String::from_utf8(out.stderr.clone()).unwrap() |
819 |
| - ); |
820 |
| - out |
| 812 | +fn print_output(out: Output) -> PrettyOutput { |
| 813 | + let p = PrettyOutput(out); |
| 814 | + println!("output: {p:?}"); |
| 815 | + p |
| 816 | +} |
| 817 | + |
| 818 | +#[derive(PartialEq)] |
| 819 | +struct PrettyOutput(Output); |
| 820 | + |
| 821 | +impl fmt::Debug for PrettyOutput { |
| 822 | + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 823 | + f.debug_struct("Output") |
| 824 | + .field("status", &self.0.status) |
| 825 | + .field("stdout", &"<follows>") |
| 826 | + .field("stderr", &"<follows>") |
| 827 | + .finish()?; |
| 828 | + |
| 829 | + // ensure line endings in command output appear literally, so |
| 830 | + // pretty_assertions can make a nice diff. |
| 831 | + writeln!(f)?; |
| 832 | + for l in String::from_utf8(self.0.stdout.clone()).unwrap().lines() { |
| 833 | + writeln!(f, "stdout => {l}")?; |
| 834 | + } |
| 835 | + for l in String::from_utf8(self.0.stderr.clone()).unwrap().lines() { |
| 836 | + writeln!(f, "stderr => {l}")?; |
| 837 | + } |
| 838 | + Ok(()) |
| 839 | + } |
| 840 | +} |
| 841 | + |
| 842 | +impl Deref for PrettyOutput { |
| 843 | + type Target = Output; |
| 844 | + |
| 845 | + fn deref(&self) -> &Self::Target { |
| 846 | + &self.0 |
| 847 | + } |
821 | 848 | }
|
822 | 849 |
|
823 | 850 | /// Wait until we can connect to localhost:port.
|
|
0 commit comments