proxy_test.go 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package term
  2. import (
  3. "bytes"
  4. "fmt"
  5. "reflect"
  6. "testing"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func TestEscapeProxyRead(t *testing.T) {
  10. escapeKeys, _ := ToBytes("DEL")
  11. keys, _ := ToBytes("a,b,c,+")
  12. reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
  13. buf := make([]byte, len(keys))
  14. nr, err := reader.Read(buf)
  15. require.NoError(t, err)
  16. require.EqualValues(t, nr, len(keys), fmt.Sprintf("nr %d should be equal to the number of %d", nr, len(keys)))
  17. require.Equal(t, keys, buf, "keys & the read buffer should be equal")
  18. keys, _ = ToBytes("")
  19. reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
  20. buf = make([]byte, len(keys))
  21. nr, err = reader.Read(buf)
  22. require.Error(t, err, "Should throw error when no keys are to read")
  23. require.EqualValues(t, nr, 0, "nr should be zero")
  24. require.Condition(t, func() (success bool) { return len(keys) == 0 && len(buf) == 0 }, "keys & the read buffer size should be zero")
  25. escapeKeys, _ = ToBytes("ctrl-x,ctrl-@")
  26. keys, _ = ToBytes("DEL")
  27. reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
  28. buf = make([]byte, len(keys))
  29. nr, err = reader.Read(buf)
  30. require.NoError(t, err)
  31. require.EqualValues(t, nr, 1, fmt.Sprintf("nr %d should be equal to the number of 1", nr))
  32. require.Equal(t, keys, buf, "keys & the read buffer should be equal")
  33. escapeKeys, _ = ToBytes("ctrl-c")
  34. keys, _ = ToBytes("ctrl-c")
  35. reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
  36. buf = make([]byte, len(keys))
  37. nr, err = reader.Read(buf)
  38. require.Condition(t, func() (success bool) {
  39. return reflect.TypeOf(err).Name() == "EscapeError"
  40. }, err)
  41. require.EqualValues(t, nr, 0, "nr should be equal to 0")
  42. require.Equal(t, keys, buf, "keys & the read buffer should be equal")
  43. escapeKeys, _ = ToBytes("ctrl-c,ctrl-z")
  44. keys, _ = ToBytes("ctrl-c,ctrl-z")
  45. reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
  46. buf = make([]byte, 1)
  47. nr, err = reader.Read(buf)
  48. require.NoError(t, err)
  49. require.EqualValues(t, nr, 0, "nr should be equal to 0")
  50. require.Equal(t, keys[0:1], buf, "keys & the read buffer should be equal")
  51. nr, err = reader.Read(buf)
  52. require.Condition(t, func() (success bool) {
  53. return reflect.TypeOf(err).Name() == "EscapeError"
  54. }, err)
  55. require.EqualValues(t, nr, 0, "nr should be equal to 0")
  56. require.Equal(t, keys[1:], buf, "keys & the read buffer should be equal")
  57. escapeKeys, _ = ToBytes("ctrl-c,ctrl-z")
  58. keys, _ = ToBytes("ctrl-c,DEL,+")
  59. reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
  60. buf = make([]byte, 1)
  61. nr, err = reader.Read(buf)
  62. require.NoError(t, err)
  63. require.EqualValues(t, nr, 0, "nr should be equal to 0")
  64. require.Equal(t, keys[0:1], buf, "keys & the read buffer should be equal")
  65. buf = make([]byte, len(keys))
  66. nr, err = reader.Read(buf)
  67. require.NoError(t, err)
  68. require.EqualValues(t, nr, len(keys), fmt.Sprintf("nr should be equal to %d", len(keys)))
  69. require.Equal(t, keys, buf, "keys & the read buffer should be equal")
  70. escapeKeys, _ = ToBytes("ctrl-c,ctrl-z")
  71. keys, _ = ToBytes("ctrl-c,DEL")
  72. reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
  73. buf = make([]byte, 1)
  74. nr, err = reader.Read(buf)
  75. require.NoError(t, err)
  76. require.EqualValues(t, nr, 0, "nr should be equal to 0")
  77. require.Equal(t, keys[0:1], buf, "keys & the read buffer should be equal")
  78. buf = make([]byte, len(keys))
  79. nr, err = reader.Read(buf)
  80. require.NoError(t, err)
  81. require.EqualValues(t, nr, len(keys), fmt.Sprintf("nr should be equal to %d", len(keys)))
  82. require.Equal(t, keys, buf, "keys & the read buffer should be equal")
  83. }