| 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]) |
| } |
| } |
| } |