sse_test.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package sse
  2. import (
  3. "bytes"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. )
  7. func TestEncodeOnlyData(t *testing.T) {
  8. w := new(bytes.Buffer)
  9. err := Encode(w, Event{
  10. Data: "junk\n\njk\nid:fake",
  11. })
  12. assert.NoError(t, err)
  13. assert.Equal(t, w.String(), "data: junk\\n\\njk\\nid:fake\n\n")
  14. }
  15. func TestEncodeWithEvent(t *testing.T) {
  16. w := new(bytes.Buffer)
  17. err := Encode(w, Event{
  18. Event: "t\n:<>\r\test",
  19. Data: "junk\n\njk\nid:fake",
  20. })
  21. assert.NoError(t, err)
  22. assert.Equal(t, w.String(), "event: t\\n:<>\\r\test\ndata: junk\\n\\njk\\nid:fake\n\n")
  23. }
  24. func TestEncodeWithId(t *testing.T) {
  25. w := new(bytes.Buffer)
  26. err := Encode(w, Event{
  27. Id: "t\n:<>\r\test",
  28. Data: "junk\n\njk\nid:fa\rke",
  29. })
  30. assert.NoError(t, err)
  31. assert.Equal(t, w.String(), "id: t\\n:<>\\r\test\ndata: junk\\n\\njk\\nid:fa\\rke\n\n")
  32. }
  33. func TestEncodeWithRetry(t *testing.T) {
  34. w := new(bytes.Buffer)
  35. err := Encode(w, Event{
  36. Retry: 11,
  37. Data: "junk\n\njk\nid:fake\n",
  38. })
  39. assert.NoError(t, err)
  40. assert.Equal(t, w.String(), "retry: 11\ndata: junk\\n\\njk\\nid:fake\\n\n\n")
  41. }
  42. func TestEncodeWithEverything(t *testing.T) {
  43. w := new(bytes.Buffer)
  44. err := Encode(w, Event{
  45. Event: "abc",
  46. Id: "12345",
  47. Retry: 10,
  48. Data: "some data",
  49. })
  50. assert.NoError(t, err)
  51. assert.Equal(t, w.String(), "id: 12345\nevent: abc\nretry: 10\ndata: some data\n\n")
  52. }
  53. func TestEncodeMap(t *testing.T) {
  54. w := new(bytes.Buffer)
  55. err := Encode(w, Event{
  56. Event: "a map",
  57. Data: map[string]interface{}{
  58. "foo": "b\n\rar",
  59. "bar": "id: 2",
  60. },
  61. })
  62. assert.NoError(t, err)
  63. assert.Equal(t, w.String(), "event: a map\ndata: {\"bar\":\"id: 2\",\"foo\":\"b\\n\\rar\"}\n\n")
  64. }
  65. func TestEncodeSlice(t *testing.T) {
  66. w := new(bytes.Buffer)
  67. err := Encode(w, Event{
  68. Event: "a slice",
  69. Data: []interface{}{1, "text", map[string]interface{}{"foo": "bar"}},
  70. })
  71. assert.NoError(t, err)
  72. assert.Equal(t, w.String(), "event: a slice\ndata: [1,\"text\",{\"foo\":\"bar\"}]\n\n")
  73. }
  74. func TestEncodeStruct(t *testing.T) {
  75. myStruct := struct {
  76. A int
  77. B string `json:"value"`
  78. }{1, "number"}
  79. w := new(bytes.Buffer)
  80. err := Encode(w, Event{
  81. Event: "a struct",
  82. Data: myStruct,
  83. })
  84. assert.NoError(t, err)
  85. assert.Equal(t, w.String(), "event: a struct\ndata: {\"A\":1,\"value\":\"number\"}\n\n")
  86. w.Reset()
  87. err = Encode(w, Event{
  88. Event: "a struct",
  89. Data: &myStruct,
  90. })
  91. assert.NoError(t, err)
  92. assert.Equal(t, w.String(), "event: a struct\ndata: {\"A\":1,\"value\":\"number\"}\n\n")
  93. }
  94. func TestEncodeInteger(t *testing.T) {
  95. w := new(bytes.Buffer)
  96. err := Encode(w, Event{
  97. Event: "an integer",
  98. Data: 1,
  99. })
  100. assert.NoError(t, err)
  101. assert.Equal(t, w.String(), "event: an integer\ndata: 1\n\n")
  102. }
  103. func TestEncodeFloat(t *testing.T) {
  104. w := new(bytes.Buffer)
  105. err := Encode(w, Event{
  106. Event: "Float",
  107. Data: 1.5,
  108. })
  109. assert.NoError(t, err)
  110. assert.Equal(t, w.String(), "event: Float\ndata: 1.5\n\n")
  111. }
  112. func TestEncodeStream(t *testing.T) {
  113. w := new(bytes.Buffer)
  114. Encode(w, Event{
  115. Event: "float",
  116. Data: 1.5,
  117. })
  118. Encode(w, Event{
  119. Id: "123",
  120. Data: map[string]interface{}{"foo": "bar", "bar": "foo"},
  121. })
  122. Encode(w, Event{
  123. Id: "124",
  124. Event: "chat",
  125. Data: "hi! dude",
  126. })
  127. assert.Equal(t, w.String(), "event: float\ndata: 1.5\n\nid: 123\ndata: {\"bar\":\"foo\",\"foo\":\"bar\"}\n\nid: 124\nevent: chat\ndata: hi! dude\n\n")
  128. }