huangcm
2025-07-01 2af87f2bbd5ba07d377b5a7f0ee0e96053f2d424
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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{[]*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])
       }
   }
}