63 lines
1.1 KiB
Go
63 lines
1.1 KiB
Go
package csv2lp
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type testCloser struct {
|
|
errorMsg string
|
|
}
|
|
|
|
func (c testCloser) Close() error {
|
|
if c.errorMsg == "" {
|
|
return nil
|
|
}
|
|
return errors.New(c.errorMsg)
|
|
}
|
|
|
|
// Test_escapeMeasurement
|
|
func TestMultiCloser(t *testing.T) {
|
|
var buf bytes.Buffer
|
|
log.SetOutput(&buf)
|
|
oldFlags := log.Flags()
|
|
log.SetFlags(0)
|
|
oldPrefix := log.Prefix()
|
|
prefix := "::PREFIX::"
|
|
log.SetPrefix(prefix)
|
|
defer func() {
|
|
log.SetOutput(os.Stderr)
|
|
log.SetFlags(oldFlags)
|
|
log.SetPrefix(oldPrefix)
|
|
}()
|
|
|
|
var tests = []struct {
|
|
subject io.Closer
|
|
errors int
|
|
}{
|
|
{MultiCloser(), 0},
|
|
{MultiCloser(testCloser{}, testCloser{}), 0},
|
|
{MultiCloser(testCloser{"a"}, testCloser{}, testCloser{"c"}), 2},
|
|
}
|
|
|
|
for i, test := range tests {
|
|
t.Run(fmt.Sprint(i), func(t *testing.T) {
|
|
buf.Reset()
|
|
err := test.subject.Close()
|
|
messages := strings.Count(buf.String(), prefix)
|
|
require.Equal(t, test.errors, messages)
|
|
if test.errors > 0 {
|
|
require.NotNil(t, err)
|
|
}
|
|
})
|
|
}
|
|
}
|