mirror of
https://github.com/anchore/syft.git
synced 2026-11-01 06:56:40 +01:00
86 lines
1.8 KiB
Go
86 lines
1.8 KiB
Go
package ui
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func Test_capture(t *testing.T) {
|
|
r, w, _ := os.Pipe()
|
|
t.Logf("pipe1: %+v", w)
|
|
|
|
buf := &bytes.Buffer{}
|
|
buf2 := &bytes.Buffer{}
|
|
|
|
go func() {
|
|
// write to the main file (e.g. os.Stdout)
|
|
_, _ = w.WriteString("write1")
|
|
|
|
// capture the output to the provided buffer
|
|
restoreInitial := capture(&w, buf, 1024)
|
|
t.Logf("pipe2: %+v", w)
|
|
_, _ = w.WriteString("write2")
|
|
|
|
// capture output nested
|
|
restoreFirstCapture := capture(&w, buf2, 1024)
|
|
t.Logf("pipe3: %+v", w)
|
|
_, _ = w.WriteString("write3")
|
|
|
|
// discard file used to write the "write3"
|
|
restoreFirstCapture()
|
|
|
|
// restore should block until all output has been captured, so it's safe to read buf2 here
|
|
require.Equal(t, "write3", buf2.String())
|
|
|
|
// restore should be safe to call multiple times
|
|
restoreFirstCapture()
|
|
require.Equal(t, "write3", buf2.String())
|
|
|
|
// write again to the initial buffer
|
|
t.Logf("pipe2+: %+v", w)
|
|
_, _ = w.WriteString("write2+")
|
|
|
|
// restore the initial file (e.g. os.Stdout) and write more to it
|
|
restoreInitial()
|
|
t.Logf("pipe1+: %+v", w)
|
|
_, _ = w.WriteString("write1+")
|
|
|
|
// close the pipe to continue with the io.ReadAll, below
|
|
_ = w.Close()
|
|
}()
|
|
|
|
got, err := io.ReadAll(r)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "write1write1+", string(got))
|
|
|
|
require.Equal(t, "write2write2+", buf.String())
|
|
}
|
|
|
|
func Test_captureBufSizes(t *testing.T) {
|
|
_, w, _ := os.Pipe()
|
|
|
|
buf := &bytes.Buffer{}
|
|
restore := capture(&w, buf, 200)
|
|
|
|
line := "line1\nline2\nline3"
|
|
|
|
_, err := w.WriteString(line)
|
|
require.NoError(t, err)
|
|
|
|
restore()
|
|
require.Equal(t, line, buf.String())
|
|
|
|
buf.Reset()
|
|
restore = capture(&w, buf, 2)
|
|
|
|
_, err = w.WriteString(line)
|
|
require.NoError(t, err)
|
|
|
|
restore()
|
|
require.Equal(t, line, buf.String())
|
|
}
|