buffer_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package ioutils
  2. import (
  3. "bytes"
  4. "testing"
  5. )
  6. func TestFixedBufferCap(t *testing.T) {
  7. buf := &fixedBuffer{buf: make([]byte, 0, 5)}
  8. n := buf.Cap()
  9. if n != 5 {
  10. t.Fatalf("expected buffer capacity to be 5 bytes, got %d", n)
  11. }
  12. }
  13. func TestFixedBufferLen(t *testing.T) {
  14. buf := &fixedBuffer{buf: make([]byte, 0, 10)}
  15. buf.Write([]byte("hello"))
  16. l := buf.Len()
  17. if l != 5 {
  18. t.Fatalf("expected buffer length to be 5 bytes, got %d", l)
  19. }
  20. buf.Write([]byte("world"))
  21. l = buf.Len()
  22. if l != 10 {
  23. t.Fatalf("expected buffer length to be 10 bytes, got %d", l)
  24. }
  25. // read 5 bytes
  26. b := make([]byte, 5)
  27. buf.Read(b)
  28. l = buf.Len()
  29. if l != 5 {
  30. t.Fatalf("expected buffer length to be 5 bytes, got %d", l)
  31. }
  32. n, err := buf.Write([]byte("i-wont-fit"))
  33. if n != 0 {
  34. t.Fatalf("expected no bytes to be written to buffer, got %d", n)
  35. }
  36. if err != errBufferFull {
  37. t.Fatalf("expected errBufferFull, got %v", err)
  38. }
  39. l = buf.Len()
  40. if l != 5 {
  41. t.Fatalf("expected buffer length to still be 5 bytes, got %d", l)
  42. }
  43. buf.Reset()
  44. l = buf.Len()
  45. if l != 0 {
  46. t.Fatalf("expected buffer length to still be 0 bytes, got %d", l)
  47. }
  48. }
  49. func TestFixedBufferString(t *testing.T) {
  50. buf := &fixedBuffer{buf: make([]byte, 0, 10)}
  51. buf.Write([]byte("hello"))
  52. buf.Write([]byte("world"))
  53. out := buf.String()
  54. if out != "helloworld" {
  55. t.Fatalf("expected output to be \"helloworld\", got %q", out)
  56. }
  57. // read 5 bytes
  58. b := make([]byte, 5)
  59. buf.Read(b)
  60. // test that fixedBuffer.String() only returns the part that hasn't been read
  61. out = buf.String()
  62. if out != "world" {
  63. t.Fatalf("expected output to be \"world\", got %q", out)
  64. }
  65. }
  66. func TestFixedBufferWrite(t *testing.T) {
  67. buf := &fixedBuffer{buf: make([]byte, 0, 64)}
  68. n, err := buf.Write([]byte("hello"))
  69. if err != nil {
  70. t.Fatal(err)
  71. }
  72. if n != 5 {
  73. t.Fatalf("expected 5 bytes written, got %d", n)
  74. }
  75. if string(buf.buf[:5]) != "hello" {
  76. t.Fatalf("expected \"hello\", got %q", string(buf.buf[:5]))
  77. }
  78. n, err = buf.Write(bytes.Repeat([]byte{1}, 64))
  79. if n != 59 {
  80. t.Fatalf("expected 59 bytes written before buffer is full, got %d", n)
  81. }
  82. if err != errBufferFull {
  83. t.Fatalf("expected errBufferFull, got %v - %v", err, buf.buf[:64])
  84. }
  85. }
  86. func TestFixedBufferRead(t *testing.T) {
  87. buf := &fixedBuffer{buf: make([]byte, 0, 64)}
  88. if _, err := buf.Write([]byte("hello world")); err != nil {
  89. t.Fatal(err)
  90. }
  91. b := make([]byte, 5)
  92. n, err := buf.Read(b)
  93. if err != nil {
  94. t.Fatal(err)
  95. }
  96. if n != 5 {
  97. t.Fatalf("expected 5 bytes read, got %d - %s", n, buf.String())
  98. }
  99. if string(b) != "hello" {
  100. t.Fatalf("expected \"hello\", got %q", string(b))
  101. }
  102. n, err = buf.Read(b)
  103. if err != nil {
  104. t.Fatal(err)
  105. }
  106. if n != 5 {
  107. t.Fatalf("expected 5 bytes read, got %d", n)
  108. }
  109. if string(b) != " worl" {
  110. t.Fatalf("expected \" worl\", got %s", string(b))
  111. }
  112. b = b[:1]
  113. n, err = buf.Read(b)
  114. if err != nil {
  115. t.Fatal(err)
  116. }
  117. if n != 1 {
  118. t.Fatalf("expected 1 byte read, got %d - %s", n, buf.String())
  119. }
  120. if string(b) != "d" {
  121. t.Fatalf("expected \"d\", got %s", string(b))
  122. }
  123. }