You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

io_test.go 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package util
  4. import (
  5. "bytes"
  6. "errors"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. type readerWithError struct {
  11. buf *bytes.Buffer
  12. }
  13. func (r *readerWithError) Read(p []byte) (n int, err error) {
  14. if r.buf.Len() < 2 {
  15. return 0, errors.New("test error")
  16. }
  17. return r.buf.Read(p)
  18. }
  19. func TestReadWithLimit(t *testing.T) {
  20. bs := []byte("0123456789abcdef")
  21. // normal test
  22. buf, err := readWithLimit(bytes.NewBuffer(bs), 5, 2)
  23. assert.NoError(t, err)
  24. assert.Equal(t, []byte("01"), buf)
  25. buf, err = readWithLimit(bytes.NewBuffer(bs), 5, 5)
  26. assert.NoError(t, err)
  27. assert.Equal(t, []byte("01234"), buf)
  28. buf, err = readWithLimit(bytes.NewBuffer(bs), 5, 6)
  29. assert.NoError(t, err)
  30. assert.Equal(t, []byte("012345"), buf)
  31. buf, err = readWithLimit(bytes.NewBuffer(bs), 5, len(bs))
  32. assert.NoError(t, err)
  33. assert.Equal(t, []byte("0123456789abcdef"), buf)
  34. buf, err = readWithLimit(bytes.NewBuffer(bs), 5, 100)
  35. assert.NoError(t, err)
  36. assert.Equal(t, []byte("0123456789abcdef"), buf)
  37. // test with error
  38. buf, err = readWithLimit(&readerWithError{bytes.NewBuffer(bs)}, 5, 10)
  39. assert.NoError(t, err)
  40. assert.Equal(t, []byte("0123456789"), buf)
  41. buf, err = readWithLimit(&readerWithError{bytes.NewBuffer(bs)}, 5, 100)
  42. assert.ErrorContains(t, err, "test error")
  43. assert.Empty(t, buf)
  44. // test public function
  45. buf, err = ReadWithLimit(bytes.NewBuffer(bs), 2)
  46. assert.NoError(t, err)
  47. assert.Equal(t, []byte("01"), buf)
  48. buf, err = ReadWithLimit(bytes.NewBuffer(bs), 9999999)
  49. assert.NoError(t, err)
  50. assert.Equal(t, []byte("0123456789abcdef"), buf)
  51. }