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.
120 lines
2.5 KiB
120 lines
2.5 KiB
package main |
|
|
|
import ( |
|
"bytes" |
|
"strings" |
|
"testing" |
|
|
|
pb "github.com/google/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]) |
|
} |
|
} |
|
}
|
|
|