FILE / ScuroNeko/mtg

internal/testlib/capture_output.go

Исходный файл и его история в репозитории.
FILE 36dad5a2f6ff1159a18b4ae92fda24c1a69d55b9
Files
mtg/internal/testlib/capture_output.go
T
2022-08-08 15:54:38 +03:00

43 lines
638 B
Go

package testlib
import (
"bytes"
"io"
"os"
"strings"
)
func CaptureStdout(callback func()) string {
return captureOutput(&os.Stdout, callback)
}
func CaptureStderr(callback func()) string {
return captureOutput(&os.Stderr, callback)
}
func captureOutput(filefp **os.File, callback func()) string {
oldFp := *filefp
defer func() {
*filefp = oldFp
}()
reader, writer, _ := os.Pipe()
buf := &bytes.Buffer{}
closeChan := make(chan bool)
go func() {
io.Copy(buf, reader) //nolint: errcheck
close(closeChan)
}()
*filefp = writer
callback()
writer.Close()
<-closeChan
return strings.TrimSpace(buf.String())
}