Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.5 KiB
121 lines
2.5 KiB
5 years ago
|
package main
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
|
||
|
pb "github.com/protocolbuffers/protobuf/examples/tutorial"
|
||
|
)
|
||
|
|
||
|
func TestWritePersonWritesPerson(t *testing.T) {
|
||
|
buf := new(bytes.Buffer)
|
||
|
// [START populate_proto]
|
||
|
p := pb.Person{
|
||
|
Id: 1234,
|
||
|
Name: "John Doe",
|
||
|
Email: "jdoe@example.com",
|
||
|
Phones: []*pb.Person_PhoneNumber{
|
||
|
{Number: "555-4321", Type: pb.Person_HOME},
|
||
|
},
|
||
|
}
|
||
|
// [END populate_proto]
|
||
|
writePerson(buf, &p)
|
||
|
got := buf.String()
|
||
|
want := `Person ID: 1234
|
||
|
Name: John Doe
|
||
|
E-mail address: jdoe@example.com
|
||
|
Home phone #: 555-4321
|
||
|
`
|
||
|
if got != want {
|
||
|
t.Errorf("writePerson(%s) =>\n\t%q, want %q", p.String(), got, want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestListPeopleWritesList(t *testing.T) {
|
||
|
buf := new(bytes.Buffer)
|
||
|
in := pb.AddressBook{People: []*pb.Person{
|
||
|
{
|
||
|
Name: "John Doe",
|
||
|
Id: 101,
|
||
|
Email: "john@example.com",
|
||
|
},
|
||
|
{
|
||
|
Name: "Jane Doe",
|
||
|
Id: 102,
|
||
|
},
|
||
|
{
|
||
|
Name: "Jack Doe",
|
||
|
Id: 201,
|
||
|
Email: "jack@example.com",
|
||
|
Phones: []*pb.Person_PhoneNumber{
|
||
|
{Number: "555-555-5555", Type: pb.Person_WORK},
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
Name: "Jack Buck",
|
||
|
Id: 301,
|
||
|
Email: "buck@example.com",
|
||
|
Phones: []*pb.Person_PhoneNumber{
|
||
|
{Number: "555-555-0000", Type: pb.Person_HOME},
|
||
|
{Number: "555-555-0001", Type: pb.Person_MOBILE},
|
||
|
{Number: "555-555-0002", Type: pb.Person_WORK},
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
Name: "Janet Doe",
|
||
|
Id: 1001,
|
||
|
Email: "janet@example.com",
|
||
|
Phones: []*pb.Person_PhoneNumber{
|
||
|
{Number: "555-777-0000"},
|
||
|
{Number: "555-777-0001", Type: pb.Person_HOME},
|
||
|
},
|
||
|
},
|
||
|
}}
|
||
|
listPeople(buf, &in)
|
||
|
want := strings.Split(`Person ID: 101
|
||
|
Name: John Doe
|
||
|
E-mail address: john@example.com
|
||
|
Person ID: 102
|
||
|
Name: Jane Doe
|
||
|
Person ID: 201
|
||
|
Name: Jack Doe
|
||
|
E-mail address: jack@example.com
|
||
|
Work phone #: 555-555-5555
|
||
|
Person ID: 301
|
||
|
Name: Jack Buck
|
||
|
E-mail address: buck@example.com
|
||
|
Home phone #: 555-555-0000
|
||
|
Mobile phone #: 555-555-0001
|
||
|
Work phone #: 555-555-0002
|
||
|
Person ID: 1001
|
||
|
Name: Janet Doe
|
||
|
E-mail address: janet@example.com
|
||
|
Mobile phone #: 555-777-0000
|
||
|
Home phone #: 555-777-0001
|
||
|
`, "\n")
|
||
|
got := strings.Split(buf.String(), "\n")
|
||
|
if len(got) != len(want) {
|
||
|
t.Errorf(
|
||
|
"listPeople(%s) =>\n\t%q has %d lines, want %d",
|
||
|
in.String(),
|
||
|
buf.String(),
|
||
|
len(got),
|
||
|
len(want))
|
||
|
}
|
||
|
lines := len(got)
|
||
|
if lines > len(want) {
|
||
|
lines = len(want)
|
||
|
}
|
||
|
for i := 0; i < lines; i++ {
|
||
|
if got[i] != want[i] {
|
||
|
t.Errorf(
|
||
|
"listPeople(%s) =>\n\tline %d %q, want %q",
|
||
|
in.String(),
|
||
|
i,
|
||
|
got[i],
|
||
|
want[i])
|
||
|
}
|
||
|
}
|
||
|
}
|