@@ -28,20 +28,32 @@ func captureStdout(t *testing.T, fn func()) string {
2828 reader , writer , err := os .Pipe ()
2929 require .NoError (t , err )
3030
31+ outputCh := make (chan struct {
32+ data []byte
33+ err error
34+ }, 1 )
35+ go func () {
36+ data , readErr := io .ReadAll (reader )
37+ outputCh <- struct {
38+ data []byte
39+ err error
40+ }{data : data , err : readErr }
41+ }()
42+
3143 os .Stdout = writer
3244 t .Cleanup (func () {
3345 os .Stdout = oldStdout
3446 })
3547
3648 fn ()
3749
50+ os .Stdout = oldStdout
3851 require .NoError (t , writer .Close ())
39- output , err := io . ReadAll ( reader )
40- require .NoError (t , err )
52+ output := <- outputCh
53+ require .NoError (t , output . err )
4154 require .NoError (t , reader .Close ())
42- os .Stdout = oldStdout
4355
44- return string (output )
56+ return string (output . data )
4557}
4658
4759func captureStderr (t * testing.T , fn func ()) string {
@@ -51,20 +63,32 @@ func captureStderr(t *testing.T, fn func()) string {
5163 reader , writer , err := os .Pipe ()
5264 require .NoError (t , err )
5365
66+ outputCh := make (chan struct {
67+ data []byte
68+ err error
69+ }, 1 )
70+ go func () {
71+ data , readErr := io .ReadAll (reader )
72+ outputCh <- struct {
73+ data []byte
74+ err error
75+ }{data : data , err : readErr }
76+ }()
77+
5478 os .Stderr = writer
5579 t .Cleanup (func () {
5680 os .Stderr = oldStderr
5781 })
5882
5983 fn ()
6084
85+ os .Stderr = oldStderr
6186 require .NoError (t , writer .Close ())
62- output , err := io . ReadAll ( reader )
63- require .NoError (t , err )
87+ output := <- outputCh
88+ require .NoError (t , output . err )
6489 require .NoError (t , reader .Close ())
65- os .Stderr = oldStderr
6690
67- return string (output )
91+ return string (output . data )
6892}
6993
7094func mustMakeDoctorOnlyCommitFromSpecs (t * testing.T , hash , left , right string ) * model.Commit {
0 commit comments