oss.indeed.com/go/go-opine@v1.3.0/internal/printing/line_prefix_writer_test.go (about)

     1  package printing
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func Test_LinePrefixWriter_Write(t *testing.T) {
    11  	toWrite := []byte("Lorem ipsum dolor sit amet, consectetur adipiscing elit.\nSed nisi lorem, cursus ac sagittis et, tincidunt sed mi.\nCurabitur vel nisi nec velit fermentum rhoncus.\n")
    12  	var b bytes.Buffer
    13  	tested := NewLinePrefixWriter(&b, "TEST ")
    14  	n, err := tested.Write(toWrite)
    15  	require.NoError(t, err)
    16  	require.Equal(t, len(toWrite), n)
    17  	require.Equal(t, "TEST Lorem ipsum dolor sit amet, consectetur adipiscing elit.\nTEST Sed nisi lorem, cursus ac sagittis et, tincidunt sed mi.\nTEST Curabitur vel nisi nec velit fermentum rhoncus.\n", b.String())
    18  }
    19  
    20  func Test_LinePrefixWriter_Write_noNewlineAtEnd(t *testing.T) {
    21  	toWrite := []byte("Lorem ipsum\ndolor sit amet\nconsectetur adipiscing")
    22  	var b bytes.Buffer
    23  	tested := NewLinePrefixWriter(&b, "TEST ")
    24  	n, err := tested.Write(toWrite)
    25  	require.NoError(t, err)
    26  	require.Equal(t, len(toWrite), n)
    27  	require.Equal(t, "TEST Lorem ipsum\nTEST dolor sit amet\nTEST consectetur adipiscing", b.String())
    28  }
    29  
    30  func Test_LinePrefixWriter_Write_continueMidLine(t *testing.T) {
    31  	toWrite1 := []byte("Lorem ipsum dolor ")
    32  	toWrite2 := []byte("sit amet")
    33  	var b bytes.Buffer
    34  	tested := NewLinePrefixWriter(&b, "TEST ")
    35  	n, err := tested.Write(toWrite1)
    36  	require.NoError(t, err)
    37  	require.Equal(t, len(toWrite1), n)
    38  	require.Equal(t, "TEST Lorem ipsum dolor ", b.String())
    39  	n, err = tested.Write(toWrite2)
    40  	require.NoError(t, err)
    41  	require.Equal(t, len(toWrite2), n)
    42  	require.Equal(t, "TEST Lorem ipsum dolor sit amet", b.String())
    43  }
    44  
    45  func Test_LinePrefixWriter_Write_continueMidLineWithNewline(t *testing.T) {
    46  	toWrite1 := []byte("Lorem ipsum dolor")
    47  	toWrite2 := []byte("\nsit amet")
    48  	var b bytes.Buffer
    49  	tested := NewLinePrefixWriter(&b, "TEST ")
    50  	n, err := tested.Write(toWrite1)
    51  	require.NoError(t, err)
    52  	require.Equal(t, len(toWrite1), n)
    53  	require.Equal(t, "TEST Lorem ipsum dolor", b.String())
    54  	n, err = tested.Write(toWrite2)
    55  	require.NoError(t, err)
    56  	require.Equal(t, len(toWrite2), n)
    57  	require.Equal(t, "TEST Lorem ipsum dolor\nTEST sit amet", b.String())
    58  }
    59  
    60  func Test_LinePrefixWriter_Write_continueNextLine(t *testing.T) {
    61  	toWrite1 := []byte("Lorem ipsum dolor\n")
    62  	toWrite2 := []byte("sit amet")
    63  	var b bytes.Buffer
    64  	tested := NewLinePrefixWriter(&b, "TEST ")
    65  	n, err := tested.Write(toWrite1)
    66  	require.NoError(t, err)
    67  	require.Equal(t, len(toWrite1), n)
    68  	require.Equal(t, "TEST Lorem ipsum dolor\n", b.String())
    69  	n, err = tested.Write(toWrite2)
    70  	require.NoError(t, err)
    71  	require.Equal(t, len(toWrite2), n)
    72  	require.Equal(t, "TEST Lorem ipsum dolor\nTEST sit amet", b.String())
    73  }
    74  
    75  func Test_LinePrefixWriter_Write_errorInPrefix(t *testing.T) {
    76  	toWrite1 := []byte("NEVER WRITTEN")
    77  	tested := NewLinePrefixWriter(errorWriter{n: 5}, "12345|<- ERROR HERE")
    78  	n, err := tested.Write(toWrite1)
    79  	require.Error(t, err)
    80  	require.Zero(t, n)
    81  }
    82  
    83  func Test_LinePrefixWriter_Write_errorAfterPrefix(t *testing.T) {
    84  	toWrite1 := []byte("6789 |<- ERROR HERE")
    85  	tested := NewLinePrefixWriter(errorWriter{n: 9}, "12345")
    86  	n, err := tested.Write(toWrite1)
    87  	require.Error(t, err)
    88  	require.Equal(t, 4, n) // Prefix is not counted as written bytes.
    89  }