|
@@ -4,6 +4,7 @@ import (
|
|
|
"bufio"
|
|
|
"bytes"
|
|
|
"fmt"
|
|
|
+ "io"
|
|
|
"io/ioutil"
|
|
|
"strings"
|
|
|
"testing"
|
|
@@ -208,6 +209,27 @@ func TestOutputAdd(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func TestOutputWriteError(t *testing.T) {
|
|
|
+ o := NewOutput()
|
|
|
+ buf := &bytes.Buffer{}
|
|
|
+ o.Add(buf)
|
|
|
+ r, w := io.Pipe()
|
|
|
+ input := "Hello there"
|
|
|
+ expectedErr := fmt.Errorf("This is an error")
|
|
|
+ r.CloseWithError(expectedErr)
|
|
|
+ o.Add(w)
|
|
|
+ n, err := o.Write([]byte(input))
|
|
|
+ if err != expectedErr {
|
|
|
+ t.Fatalf("Output.Write() should return the first error encountered, if any")
|
|
|
+ }
|
|
|
+ if buf.String() != input {
|
|
|
+ t.Fatalf("Output.Write() should attempt write on all destinations, even after encountering an error")
|
|
|
+ }
|
|
|
+ if n != len(input) {
|
|
|
+ t.Fatalf("Output.Write() should return the size of the input if it successfully writes to at least one destination")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func TestInputAddEmpty(t *testing.T) {
|
|
|
i := NewInput()
|
|
|
var b bytes.Buffer
|