@@ -1,15 +1,16 @@ package ioutil import ( diff "0dev.org/diff" "bytes" + "errors" "io" "testing" ) -func TestWriter(t *testing.T) { +func TestWriterFunc(t *testing.T) { var ( input []byte = []byte{0, 1, 2, 3, 4, 5, 6, 7} output []byte reader *bytes.Reader = bytes.NewReader(input) @@ -25,11 +26,11 @@ if len(delta.Added) > 0 || len(delta.Removed) > 0 { t.Error("Differences detected ", delta) } } -func TestReader(t *testing.T) { +func TestReaderFunc(t *testing.T) { var ( input []byte = []byte{0, 1, 2, 3, 4, 5, 6, 7} output []byte reader *bytes.Reader = bytes.NewReader(input) @@ -45,11 +46,85 @@ if len(delta.Added) > 0 || len(delta.Removed) > 0 { t.Error("Differences detected ", delta) } } -func TestBlockReader(t *testing.T) { +func TestSizedWriter(t *testing.T) { + var ( + buffer bytes.Buffer + writer io.Writer = SizedWriter(&buffer, 4) + ) + + count, err := writer.Write([]byte("12")) + if count != 2 { + t.Error("Unexpected write count from SizedWriter", count) + } + if err != nil { + t.Error("Unexpected error from SizedWriter", err) + } + + count, err = writer.Write([]byte("3456")) + if count != 2 { + t.Error("Unexpected write count from SizedWriter", count) + } + if err != nil { + t.Error("Unexpected error from SizedWriter", err) + } + if buffer.String() != "1234" { + t.Error("Unexpected value in wrapped writer", buffer.String()) + } + + // Flush the buffer + count, err = writer.Write(nil) + if count != 0 { + t.Error("Unexpected write count from SizedWriter", count) + } + if err != nil { + t.Error("Unexpected error from SizedWriter", err) + } + if buffer.String() != "123456" { + t.Error("Unexpected value in wrapped writer", buffer.String()) + } + + count, err = writer.Write([]byte("7890")) + if count != 4 { + t.Error("Unexpected write count from SizedWriter", count) + } + if err != nil { + t.Error("Unexpected error from SizedWriter", err) + } + if buffer.String() != "1234567890" { + t.Error("Unexpected value in wrapped writer", buffer.String()) + } +} + +func TestSizedWriterError(t *testing.T) { + var ( + errorWriter io.Writer = WriterFunc(func([]byte) (int, error) { + return 1, errors.New("Invalid write") + }) + writer io.Writer = SizedWriter(errorWriter, 2) + ) + + count, err := writer.Write([]byte("1")) + if count != 1 { + t.Error("Unexpected write count from SizedWriter", count) + } + if err != nil { + t.Error("Unexpected error from SizedWriter", err) + } + + count, err = writer.Write([]byte("2")) + if count != 1 { + t.Error("Unexpected write count from SizedWriter", count) + } + if err == nil { + t.Error("Unexpected lack of error from SizedWriter") + } +} + +func TestSizedReader(t *testing.T) { var ( input []byte = []byte{0, 1, 2, 3, 4, 5, 6, 7} output []byte = make([]byte, 16) reader *bytes.Reader = bytes.NewReader(input) @@ -57,38 +132,38 @@ ) // Expecting a read count of 2 count, err := min.Read(output[:2]) if count != 2 { - t.Error("Invalid read count from MinReader", count) + t.Error("Invalid read count from SizedReader", count) } if err != nil { - t.Error("Unexpected error from MinReader", err) + t.Error("Unexpected error from SizedReader", err) } // Expecting a read count of 2 as it should have 2 bytes in its buffer count, err = min.Read(output[:3]) if count != 2 { - t.Error("Invalid read count from MinReader", count) + t.Error("Invalid read count from SizedReader", count) } if err != nil { - t.Error("Unexpected error from MinReader", err) + t.Error("Unexpected error from SizedReader", err) } // Expecting a read count of 4 as the buffer should be empty count, err = min.Read(output[:4]) if count != 4 { - t.Error("Invalid read count from MinReader", count) + t.Error("Invalid read count from SizedReader", count) } if err != nil { - t.Error("Unexpected error from MinReader", err) + t.Error("Unexpected error from SizedReader", err) } // Expecting a read count of 0 with an EOF as the buffer should be empty count, err = min.Read(output[:1]) if count != 0 { - t.Error("Invalid read count from MinReader", count) + t.Error("Invalid read count from SizedReader", count) } if err != io.EOF { - t.Error("Unexpected error from MinReader", err) + t.Error("Unexpected error from SizedReader", err) } }