github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/gorilla/websocket/json_test.go (about) 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 5 package websocket 6 7 import ( 8 "bytes" 9 "encoding/json" 10 "io" 11 "reflect" 12 "testing" 13 ) 14 15 func TestJSON(t *testing.T) { 16 var buf bytes.Buffer 17 c := fakeNetConn{&buf, &buf} 18 wc := newConn(c, true, 1024, 1024) 19 rc := newConn(c, false, 1024, 1024) 20 21 var actual, expect struct { 22 A int 23 B string 24 } 25 expect.A = 1 26 expect.B = "hello" 27 28 if err := wc.WriteJSON(&expect); err != nil { 29 t.Fatal("write", err) 30 } 31 32 if err := rc.ReadJSON(&actual); err != nil { 33 t.Fatal("read", err) 34 } 35 36 if !reflect.DeepEqual(&actual, &expect) { 37 t.Fatal("equal", actual, expect) 38 } 39 } 40 41 func TestPartialJSONRead(t *testing.T) { 42 var buf bytes.Buffer 43 c := fakeNetConn{&buf, &buf} 44 wc := newConn(c, true, 1024, 1024) 45 rc := newConn(c, false, 1024, 1024) 46 47 var v struct { 48 A int 49 B string 50 } 51 v.A = 1 52 v.B = "hello" 53 54 messageCount := 0 55 56 // Partial JSON values. 57 58 data, err := json.Marshal(v) 59 if err != nil { 60 t.Fatal(err) 61 } 62 for i := len(data) - 1; i >= 0; i-- { 63 if err := wc.WriteMessage(TextMessage, data[:i]); err != nil { 64 t.Fatal(err) 65 } 66 messageCount++ 67 } 68 69 // Whitespace. 70 71 if err := wc.WriteMessage(TextMessage, []byte(" ")); err != nil { 72 t.Fatal(err) 73 } 74 messageCount++ 75 76 // Close. 77 78 if err := wc.WriteMessage(CloseMessage, FormatCloseMessage(CloseNormalClosure, "")); err != nil { 79 t.Fatal(err) 80 } 81 82 for i := 0; i < messageCount; i++ { 83 err := rc.ReadJSON(&v) 84 if err != io.ErrUnexpectedEOF { 85 t.Error("read", i, err) 86 } 87 } 88 89 err = rc.ReadJSON(&v) 90 if _, ok := err.(*CloseError); !ok { 91 t.Error("final", err) 92 } 93 } 94 95 func TestDeprecatedJSON(t *testing.T) { 96 var buf bytes.Buffer 97 c := fakeNetConn{&buf, &buf} 98 wc := newConn(c, true, 1024, 1024) 99 rc := newConn(c, false, 1024, 1024) 100 101 var actual, expect struct { 102 A int 103 B string 104 } 105 expect.A = 1 106 expect.B = "hello" 107 108 if err := WriteJSON(wc, &expect); err != nil { 109 t.Fatal("write", err) 110 } 111 112 if err := ReadJSON(rc, &actual); err != nil { 113 t.Fatal("read", err) 114 } 115 116 if !reflect.DeepEqual(&actual, &expect) { 117 t.Fatal("equal", actual, expect) 118 } 119 }