package internal import ( "bytes" "encoding/json" "strings" "testing" . "github.com/smartystreets/goconvey/convey" ) var ( dataTable = []struct { Message *Message JSON string }{ { Message: &Message{ FileOfferMessage: &FileOfferMessage{ FileName: "hello.exe", MimeType: "application/octet-stream", Length: 1000, }, }, JSON: `{"data":{"fileName":"hello.exe","length":1000,"mimeType":"application/octet-stream"},"type":"fileOffer"}`, }, { Message: &Message{ FileTransferRequestMessage: &FileTransferRequestMessage{ FileName: "hello.exe", }, }, JSON: `{"data":{"fileName":"hello.exe"},"type":"fileTransferRequest"}`, }, } ) func Test_Message_MarshalJSON(t *testing.T) { Convey("Message", t, func() { Convey("MarshalJSON", func() { for _, data := range dataTable { buf := new(bytes.Buffer) err := json.NewEncoder(buf).Encode(data.Message) So(err, ShouldBeNil) So(strings.TrimSpace(buf.String()), ShouldEqual, data.JSON) } }) }) } func Test_Message_UnmarshalJSON(t *testing.T) { Convey("Message", t, func() { Convey("UnmarshalJSON", func() { for _, data := range dataTable { m := new(Message) buf := strings.NewReader(data.JSON) err := json.NewDecoder(buf).Decode(m) So(err, ShouldBeNil) So(m, ShouldResemble, data.Message) } }) }) }