4
0

directory_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package detect
  2. import (
  3. "bufio"
  4. "bytes"
  5. "io"
  6. "strings"
  7. "testing"
  8. "github.com/stretchr/testify/require"
  9. )
  10. func Test_readUntilSafeBoundary(t *testing.T) {
  11. // Arrange
  12. cases := []struct {
  13. name string
  14. r io.Reader
  15. expected string
  16. }{
  17. // Current split is fine, exit early.
  18. {
  19. name: "safe original split - LF",
  20. r: strings.NewReader("abc\n\ndefghijklmnop\n\nqrstuvwxyz"),
  21. expected: "abc\n\n",
  22. },
  23. {
  24. name: "safe original split - CRLF",
  25. r: strings.NewReader("a\r\n\r\nbcdefghijklmnop\n"),
  26. expected: "a\r\n\r\n",
  27. },
  28. // Current split is bad, look for a better one.
  29. {
  30. name: "safe split - LF",
  31. r: strings.NewReader("abcdefg\nhijklmnop\n\nqrstuvwxyz"),
  32. expected: "abcdefg\nhijklmnop\n\n",
  33. },
  34. {
  35. name: "safe split - CRLF",
  36. r: strings.NewReader("abcdefg\r\nhijklmnop\r\n\r\nqrstuvwxyz"),
  37. expected: "abcdefg\r\nhijklmnop\r\n\r\n",
  38. },
  39. {
  40. name: "safe split - blank line",
  41. r: strings.NewReader("abcdefg\nhijklmnop\n\t \t\nqrstuvwxyz"),
  42. expected: "abcdefg\nhijklmnop\n\t \t\n",
  43. },
  44. // Current split is bad, exhaust options.
  45. {
  46. name: "no safe split",
  47. r: strings.NewReader("abcdefg\nhijklmnopqrstuvwxyz"),
  48. expected: "abcdefg\nhijklmnopqrstuvwx",
  49. },
  50. }
  51. for _, c := range cases {
  52. t.Run(c.name, func(t *testing.T) {
  53. buf := make([]byte, 5)
  54. n, err := c.r.Read(buf)
  55. require.NoError(t, err)
  56. // Act
  57. reader := bufio.NewReader(c.r)
  58. peekBuf := bytes.NewBuffer(buf[:n])
  59. err = readUntilSafeBoundary(reader, n, 20, peekBuf)
  60. require.NoError(t, err)
  61. // Assert
  62. t.Logf(peekBuf.String())
  63. require.Equal(t, c.expected, string(peekBuf.Bytes()))
  64. })
  65. }
  66. }