| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package detect
- import (
- "bufio"
- "bytes"
- "io"
- "strings"
- "testing"
- "github.com/stretchr/testify/require"
- )
- func Test_readUntilSafeBoundary(t *testing.T) {
- // Arrange
- cases := []struct {
- name string
- r io.Reader
- expected string
- }{
- // Current split is fine, exit early.
- {
- name: "safe original split - LF",
- r: strings.NewReader("abc\n\ndefghijklmnop\n\nqrstuvwxyz"),
- expected: "abc\n\n",
- },
- {
- name: "safe original split - CRLF",
- r: strings.NewReader("a\r\n\r\nbcdefghijklmnop\n"),
- expected: "a\r\n\r\n",
- },
- // Current split is bad, look for a better one.
- {
- name: "safe split - LF",
- r: strings.NewReader("abcdefg\nhijklmnop\n\nqrstuvwxyz"),
- expected: "abcdefg\nhijklmnop\n\n",
- },
- {
- name: "safe split - CRLF",
- r: strings.NewReader("abcdefg\r\nhijklmnop\r\n\r\nqrstuvwxyz"),
- expected: "abcdefg\r\nhijklmnop\r\n\r\n",
- },
- {
- name: "safe split - blank line",
- r: strings.NewReader("abcdefg\nhijklmnop\n\t \t\nqrstuvwxyz"),
- expected: "abcdefg\nhijklmnop\n\t \t\n",
- },
- // Current split is bad, exhaust options.
- {
- name: "no safe split",
- r: strings.NewReader("abcdefg\nhijklmnopqrstuvwxyz"),
- expected: "abcdefg\nhijklmnopqrstuvwx",
- },
- }
- for _, c := range cases {
- t.Run(c.name, func(t *testing.T) {
- buf := make([]byte, 5)
- n, err := c.r.Read(buf)
- require.NoError(t, err)
- // Act
- reader := bufio.NewReader(c.r)
- peekBuf := bytes.NewBuffer(buf[:n])
- err = readUntilSafeBoundary(reader, n, 20, peekBuf)
- require.NoError(t, err)
- // Assert
- t.Logf(peekBuf.String())
- require.Equal(t, c.expected, string(peekBuf.Bytes()))
- })
- }
- }
|