76 lines
1.6 KiB
Go
76 lines
1.6 KiB
Go
package testutil
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"io/ioutil"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// BufferReader is implemented by types that read from a string buffer.
|
|
type BufferReader interface {
|
|
io.Reader
|
|
Reset(string)
|
|
}
|
|
|
|
// BufferWriter is implemented by types that write to a buffer.
|
|
type BufferWriter interface {
|
|
io.Writer
|
|
Reset()
|
|
Bytes() []byte
|
|
String() string
|
|
}
|
|
|
|
// ApplyMockIO replaces stdin/out/err with buffers that can be used during testing.
|
|
// Returns an input BufferReader and an output BufferWriter.
|
|
func ApplyMockIO(c *cobra.Command) (BufferReader, BufferWriter) {
|
|
mockIn := strings.NewReader("")
|
|
mockOut := bytes.NewBufferString("")
|
|
|
|
c.SetIn(mockIn)
|
|
c.SetOut(mockOut)
|
|
c.SetErr(mockOut)
|
|
|
|
return mockIn, mockOut
|
|
}
|
|
|
|
// ApplyMockIODiscardOutputs replaces a cobra.Command output and error streams with a dummy io.Writer.
|
|
// Replaces and returns the io.Reader associated to the cobra.Command input stream.
|
|
func ApplyMockIODiscardOutErr(c *cobra.Command) BufferReader {
|
|
mockIn := strings.NewReader("")
|
|
|
|
c.SetIn(mockIn)
|
|
c.SetOut(ioutil.Discard)
|
|
c.SetErr(ioutil.Discard)
|
|
|
|
return mockIn
|
|
}
|
|
|
|
// Write the given string to a new temporary file.
|
|
// Returns an open file for the test to use.
|
|
func WriteToNewTempFile(t testing.TB, s string) *os.File {
|
|
t.Helper()
|
|
|
|
fp := TempFile(t)
|
|
_, err := fp.WriteString(s)
|
|
|
|
require.Nil(t, err)
|
|
|
|
return fp
|
|
}
|
|
|
|
// TempFile returns a writable temporary file for the test to use.
|
|
func TempFile(t testing.TB) *os.File {
|
|
t.Helper()
|
|
|
|
fp, err := ioutil.TempFile(t.TempDir(), "")
|
|
require.NoError(t, err)
|
|
|
|
return fp
|
|
}
|