json_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package websocket
  5. import (
  6. "bytes"
  7. "encoding/json"
  8. "io"
  9. "reflect"
  10. "testing"
  11. )
  12. func TestJSON(t *testing.T) {
  13. var buf bytes.Buffer
  14. wc := newTestConn(nil, &buf, true)
  15. rc := newTestConn(&buf, nil, false)
  16. var actual, expect struct {
  17. A int
  18. B string
  19. }
  20. expect.A = 1
  21. expect.B = "hello"
  22. if err := wc.WriteJSON(&expect); err != nil {
  23. t.Fatal("write", err)
  24. }
  25. if err := rc.ReadJSON(&actual); err != nil {
  26. t.Fatal("read", err)
  27. }
  28. if !reflect.DeepEqual(&actual, &expect) {
  29. t.Fatal("equal", actual, expect)
  30. }
  31. }
  32. func TestPartialJSONRead(t *testing.T) {
  33. var buf0, buf1 bytes.Buffer
  34. wc := newTestConn(nil, &buf0, true)
  35. rc := newTestConn(&buf0, &buf1, false)
  36. var v struct {
  37. A int
  38. B string
  39. }
  40. v.A = 1
  41. v.B = "hello"
  42. messageCount := 0
  43. // Partial JSON values.
  44. data, err := json.Marshal(v)
  45. if err != nil {
  46. t.Fatal(err)
  47. }
  48. for i := len(data) - 1; i >= 0; i-- {
  49. if err := wc.WriteMessage(TextMessage, data[:i]); err != nil {
  50. t.Fatal(err)
  51. }
  52. messageCount++
  53. }
  54. // Whitespace.
  55. if err := wc.WriteMessage(TextMessage, []byte(" ")); err != nil {
  56. t.Fatal(err)
  57. }
  58. messageCount++
  59. // Close.
  60. if err := wc.WriteMessage(CloseMessage, FormatCloseMessage(CloseNormalClosure, "")); err != nil {
  61. t.Fatal(err)
  62. }
  63. for i := 0; i < messageCount; i++ {
  64. err := rc.ReadJSON(&v)
  65. if err != io.ErrUnexpectedEOF {
  66. t.Error("read", i, err)
  67. }
  68. }
  69. err = rc.ReadJSON(&v)
  70. if _, ok := err.(*CloseError); !ok {
  71. t.Error("final", err)
  72. }
  73. }
  74. func TestDeprecatedJSON(t *testing.T) {
  75. var buf bytes.Buffer
  76. wc := newTestConn(nil, &buf, true)
  77. rc := newTestConn(&buf, nil, false)
  78. var actual, expect struct {
  79. A int
  80. B string
  81. }
  82. expect.A = 1
  83. expect.B = "hello"
  84. if err := WriteJSON(wc, &expect); err != nil {
  85. t.Fatal("write", err)
  86. }
  87. if err := ReadJSON(rc, &actual); err != nil {
  88. t.Fatal("read", err)
  89. }
  90. if !reflect.DeepEqual(&actual, &expect) {
  91. t.Fatal("equal", actual, expect)
  92. }
  93. }