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